PHP缓存技术
来源:互联网 发布:java枚举类型enum 编辑:程序博客网 时间:2024/05/19 00:37
1普遍缓存技术
数据缓存:这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
2页面缓存 :
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
时间触发缓存 :
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。
内容触发缓存 :
当插入数据或更新数据时,强制更新缓存。
3静态缓存:
这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到
4内存缓存:
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
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
如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache)
NGINX的例子
- <nginx.conf>
- #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= -
server 10.10.10.221:80 weight= -
} -
-
upstream bspimgsvr { -
server 10.10.10.201:80 weight= -
} -
-
upstream bspstylesvr { -
server 10.10.10.202:80 weight= -
} -
-
upstream bsphelpsvr { -
server 10.10.10.204:80 weight= -
} -
-
upstream bspwsisvr { -
server 10.10.10.203:80 weight= -
} -
-
upstream bspadminsvr { -
server 10.10.10.222:80 weight= -
} -
-
upstream bspbuyersvr { -
server 10.10.10.223:80 weight= -
} -
-
upstream bspsellersvr { -
server 10.10.10.225:80 weight= -
} -
upstream bsploginsvr { -
server 10.10.10.220:443 weight= -
} -
upstream bspregistersvr { -
server 10.10.10.220:80 weight= -
} -
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; -
} -
- }
- <conf/proxy_setting.conf>
-
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;
- <VirtualHost
*> - ServerName
www.zxsv.com - ServerAdmin
admin@zxsv.com - #
reverse proxy setting - ProxyPass
/ http://www.zxsv.com:8080/ - ProxyPassReverse
/ http://www.zxsv.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/dev_access_log combined - </VirtualHost>
而SQUID的例子 ,这方面网上有写的太多,大家自己搜索一下
DNS轮询 :
BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。
我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。
原文:http://hudeyong926.iteye.com/blog/519877
- 【php缓存技术】php缓存技术
- PHP缓存技术介绍!
- PHP缓存技术
- php 缓存技术
- php缓存技术详谈
- php缓存技术
- PHP缓存技术
- PHP缓存技术
- PHP缓存技术详谈
- php缓存技术详解
- PHP缓存技术
- PHP缓存技术详解
- php缓存技术
- php缓存技术
- php缓存技术
- php缓存技术总结
- php缓存技术详解
- PHP网页缓存技术
- 使用PDO访问数据库
- 剑指offer第三题Java
- php函数call_user_func和call_user…
- Win+Nginx+PHP+MySQL环境搭建
- JavaScript面向对象编程
- PHP缓存技术
- uva 1382
- 活者的原则
- 弹簧效果切换按钮
- 不要把学生气带入社会
- vmware虚拟机NAT模式下网络配置
- mysql索引优化
- Virtualbox 安装gost xp
- linux 下编译安装php mongodb扩展