PHP常用的缓存技术汇总_PHP
一、数据缓存
这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
二、页面缓存
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)。
三、时间触发缓存
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。
四、内容触发缓存
当插入数据或更新数据时,强制更新缓存。
五、静态缓存
这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到。
六、内存缓存
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
这里说下Memcached的例子:
复制代码 代码如下:
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)\n";
$get_result = $memcache->get('key');
echo "Data from the cache:\n";
var_dump($get_result);
读库的例子:
复制代码 代码如下:
$sql = 'SELECT * FROM users';
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
七、PHP的缓冲器、加速器
有eaccelerator, apc, phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK。
八、MYSQL缓存
这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的
我贴段根据蓝色那家伙修改后部分my.ini吧,2G的MYISAM表可以在0.05S左右,据说他前后改了有快一年。
复制代码 代码如下:
[client]
……
default-character-set=gbk
default-storage-engine=MYISAM
max_connections=600
max_connect_errors=500
back_log=200
interactive_timeout=7200
query_cache_size=64M
……
table_cache=512
……
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=128M
key_buffer_size=1024M
read_buffer_size=512M
……
thread_concurrency=8
九、基于反向代理的Web缓存
如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache)
NGINX的例子:
复制代码 代码如下:
#user nobody;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 10240;
events {
use epoll;
worker_connections 51200;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
# server pool
upstream bspfrontsvr {
server 10.10.10.224:80 weight=1;
server 10.10.10.221:80 weight=1;
}
upstream bspimgsvr {
server 10.10.10.201:80 weight=1;
}
upstream bspstylesvr {
server 10.10.10.202:80 weight=1;
}
upstream bsphelpsvr {
server 10.10.10.204:80 weight=1;
}
upstream bspwsisvr {
server 10.10.10.203:80 weight=1;
}
upstream bspadminsvr {
server 10.10.10.222:80 weight=1;
}
upstream bspbuyersvr {
server 10.10.10.223:80 weight=1;
}
upstream bspsellersvr {
server 10.10.10.225:80 weight=1;
}
upstream bsploginsvr {
server 10.10.10.220:443 weight=1;
}
upstream bspregistersvr {
server 10.10.10.220:80 weight=1;
}
log_format test_com '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
#--------------------------------------------------------------------
#img.test.com
server {
listen 10.10.10.230:80;
server_name img.test.com;
location / {
proxy_pass http://bspimgsvr;
include proxy_setting.conf;
}
access_log logs/img.log test_com;
}
#style.test.com
server {
listen 10.10.10.230:80;
server_name style.test.com;
location / {
proxy_pass http://bspstylesvr;
include proxy_setting.conf;
}
access_log logs/style.log test_com;
}
#help.test.com
server {
listen 10.10.10.230:80;
server_name help.test.com;
location / {
proxy_pass http://bsphelpsvr;
include proxy_setting.conf;
}
access_log logs/help.log test_com;
}
#admin.test.com
server {
listen 10.10.10.230:80;
server_name admin.test.com;
location / {
proxy_pass http://bspadminsvr;
include proxy_setting.conf;
}
access_log logs/admin.log test_com;
}
#buyer.test.com
server {
listen 10.10.10.230:80;
server_name buyer.test.com;
location / {
proxy_pass http://bspbuyersvr;
include proxy_setting.conf;
}
access_log logs/buyer.log test_com;
}
#seller.test.com
server {
listen 10.10.10.230:80;
server_name seller.test.com;
location / {
proxy_pass http://bspsellersvr;
include proxy_setting.conf;
}
access_log logs/seller.log test_com;
}
#wsi.test.com
server {
listen 10.10.10.230:80;
server_name wsi.test.com;
location / {
proxy_pass http://bspwsisvr;
include proxy_setting.conf;
}
access_log logs/wsi.log test_com;
}
#www.test.com
server {
listen 10.10.10.230:80;
server_name www.test.com *.test.com;
location ~ ^/NginxStatus/ {
stub_status on;
access_log off;
}
location / {
proxy_pass http://bspfrontsvr;
include proxy_setting.conf;
}
access_log logs/www.log test_com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#login.test.com
server {
listen 10.10.10.230:443;
server_name login.test.com;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://bsploginsvr;
include proxy_setting.conf;
}
access_log logs/login.log test_com;
}
#login.test.com for register
server {
listen 10.10.10.230:80;
server_name login.test.com;
location / {
proxy_pass http://bspregistersvr;
include proxy_setting.conf;
}
access_log logs/register.log test_com;
}
}
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
apache mod_proxy的例子:
复制代码 代码如下:
ServerName bitsCN.com
ServerAdmin admin@zxsv.com
# reverse proxy setting
ProxyPass / http://bitsCN.com:8080/
ProxyPassReverse / http://bitsCN.com:8080/
# cache dir root
CacheRoot "/var/www/proxy"
# max cache storage
CacheSize 50000000
# hour: every 4 hour
CacheGcInterval 4
# max page expire time: hour
CacheMaxExpire 240
# Expire time = (now - last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# defalt expire tag: hour
CacheDefaultExpire 1
# force complete after precent of content retrived: 60-90%
CacheForceCompletion 80
CustomLog /usr/local/apache/logs/jb51_net_access_log combined
十、DNS轮询
BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。
我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











インターネット アプリケーションの継続的な開発に伴い、Web サイトのパフォーマンスの最適化は Web サイト開発に必要なタスクの 1 つになりました。中でも、キャッシュ技術の利用は重要な最適化手法です。 PHP 開発において、キャッシュ テクノロジは Web サイトのパフォーマンスと応答速度を向上させ、繰り返しの計算やデータベース クエリなどの操作を効果的に回避し、それによって動的データのキャッシュを実現します。この記事では、キャッシュ テクノロジを使用して PHP で動的データ キャッシュを実装する方法を紹介します。キャッシュの概念 キャッシュは、アプリケーションのパフォーマンスを向上させるために使用されるテクノロジです。ウェブサイト開発におけるキャッシングはキャッシュサービスです

PHP を使用して Web サイトのパフォーマンスと読み込み速度を最適化する方法 インターネットの急速な発展に伴い、Web サイトのパフォーマンスと読み込み速度がますます注目を集めています。 PHP はサーバーサイドのスクリプト言語として広く使用されており、Web サイトのパフォーマンスと読み込み速度の最適化に重要な役割を果たします。この記事では、PHP を使用して Web サイトのパフォーマンスと読み込み速度を向上させるためのヒントと方法を紹介します。キャッシュ メカニズムの使用 キャッシュは、Web サイトのパフォーマンスを向上させる効果的な方法です。 PHP は、ファイル キャッシュ、メモリ キャッシュ、データ キャッシュなど、さまざまなキャッシュ メカニズムを提供します。

PHP は、Web 開発で広く使用されているサーバー側プログラミング言語です。 Web サイトの開発プロセスでは、静的リソース ファイル (CSS、JS、画像などを含む) の読み込み速度が Web サイトのユーザー エクスペリエンスに直接影響します。そのため、静的リソースファイルの読み込み速度をいかに向上させるかが開発者にとって検討すべき課題の一つとなっています。解決策の 1 つは、PHP でキャッシュ テクノロジを使用することです。 PHP では、静的リソース ファイルのキャッシュは主にブラウザ キャッシュとサーバー キャッシュの 2 種類に分けられます。ブラウザのキャッシュは、ブラウザのローカル キャッシュ メカニズムに依存して、

最新の Web アプリケーションが複雑になるにつれて、パフォーマンスの問題が開発者にとって大きな課題となっています。一般的なパフォーマンスのボトルネックの 1 つは、データベースまたはファイル システムへの頻繁なアクセスであり、深刻なパフォーマンスの問題を引き起こす可能性があります。キャッシュ テクノロジは、これらの問題を解決する 1 つの方法です。この記事では、PHPでキャッシュを利用するための基礎知識と実装方法を紹介します。ここでは、いくつかの一般的な PHP キャッシュ手法と、それらをアプリケーションに統合する方法について説明します。キャッシュとは何ですか?キャッシュはアプリケーションが次のことを行う方法です。

PHP は一般的なサーバー側スクリプト言語であり、キャッシュ テクノロジはパフォーマンスを最適化する効果的な方法です。この記事では、さまざまなアプリケーション シナリオで PHP キャッシュ テクノロジを使用する利点と適用方法について説明します。 Web アプリケーション Web アプリケーションは、起動時に構成ファイルのロードやデータベース接続など、多数の初期化操作を実行する必要があります。これらの操作は多くの時間とコンピューティング リソースを消費し、Web アプリケーションのパフォーマンスに影響を与えます。キャッシュ技術を利用すると、これらの初期化操作の実行回数が減り、Webアプリケーションの応答速度が向上します。 Web アプリケーションでは、

PHP は Web 開発で広く使用されているスクリプト言語であり、多くの Web サイトは PHP を使用して開発されています。しかし、訪問数が増加し続けるにつれて、Web サイトのパフォーマンスの問題がますます顕著になってきました。 Web サイトのパフォーマンスを向上させるには、キャッシュ テクノロジーが非常に効果的なソリューションです。この記事では、読者がキャッシュ テクノロジーをより深く理解し、Web サイトのパフォーマンスを向上させるために適用できるようにすることを目的として、PHP のキャッシュ テクノロジーを紹介します。キャッシュ テクノロジとは何ですか? キャッシュ テクノロジは、データ アクセスの速度を向上させるためにアプリケーションで使用されるテクノロジです。メモリまたはディスクにキャッシュされます

インターネットの急速な発展に伴い、アプリケーションをいかに短時間でユーザーの要求に応答させるかは、常に最適化されている問題です。キャッシュ テクノロジは、一般的な最適化手法の 1 つです。この記事では、PHP のキャッシュ テクノロジがアプリケーションの応答速度に及ぼす最適化効果に焦点を当てます。キャッシュの基本概念 キャッシュとは、アプリケーションの実行中に実行結果をメモリまたはディスクに一時的に保存することを指します。次回同じリクエストが来た場合、再度同じリクエストを実行することなく、計算結果をメモリやディスクから直接読み出すことができます。

PHP のキャッシュ テクノロジを使用してパフォーマンスを向上させるにはどうすればよいですか?インターネットの急速な発展に伴い、Web サイトのパフォーマンスはユーザー エクスペリエンスと SEO ランキングにとってますます重要になってきています。一般的に使用されるサーバー側スクリプト言語として、PHP のパフォーマンスは Web サイトの応答速度に重要な役割を果たします。 PHP のキャッシュ テクノロジは、パフォーマンスを向上させる重要な手段です。 1. キャッシングテクノロジーを使用する理由は何ですか? PHP のキャッシュ テクノロジの使用方法を理解する前に、まずなぜキャッシュ テクノロジを使用する必要があるのかを理解しましょう。 Web 開発では、通常、ページの生成は
