PHP企业级应用缓存技术详解

之前我们曾深入的探讨过PHP缓存技术,其中主要提到了数据缓存。数据缓存主要是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, 并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

创新互联是专业的叙州网站建设公司,叙州接单;提供成都网站设计、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行叙州网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个 数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。

页面缓存

每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问 的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

时间触发缓存

检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

内容触发缓存

当插入数据或更新数据时,强制更新缓存。

静态缓存

这里所说的静态缓存是指静态化,直接生成HTML或xml等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

内存缓存

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

 
 
 
  1. $memcache = new Memcache;
  2. $memcache->connect(‘localhost’, 11211) or die (“Could not connect”);
  3. $version = $memcache->getVersion();
  4. echo “Server’s version: “.$version.”\n”;
  5. $tmp_object = new stdClass;
  6. $tmp_object->str_attr = ‘test’;
  7. $tmp_object->int_attr = 123;
  8. $memcache->set(‘key’, $tmp_object, false, 10) or die (“Failed to save data at the server”);
  9. echo “Store data in the cache (data will expire in 10 seconds)\n”;
  10. $get_result = $memcache->get(‘key’);
  11. echo “Data from the cache:\n”;
  12. var_dump($get_result);
  13. ?>

读库的例子:

 
 
 
  1. $sql = ‘SELECT * FROM users’;
  2. $key = md5($sql);   //memcached 对象标识符
  3. if ( !($datas = $mc->get($key)) ) {
  4. //  在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集
  5. echo “n”.str_pad(‘Read datas from MySQL.’, 60, ‘_’).”n”;
  6. $conn = mysql_connect(‘localhost’, ‘test’, ‘test’);
  7. mysql_select_db(‘test’);
  8. $result = mysql_query($sql);
  9. while ($row = mysql_fetch_object($result))
  10. $datas[] = $row;
  11. //  将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用
  12. $mc->add($key, $datas);
  13. } else {
  14. echo “n”.str_pad(‘Read datas from memcached.’, 60, ‘_’).”n”;
  15. }
  16. var_dump($datas);
  17. ?>

PHP的缓冲器

比如eaccelerator,apc,phpa,xcache等等。

MySQL缓存

这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的。

 
 
 
  1. [client]
  2. ……
  3. default-character-set=gbk
  4. default-storage-engine=MYISAM
  5. max_connections=600
  6. max_connect_errors=500
  7. back_log=200
  8. interactive_timeout=7200
  9. query_cache_size=64M
  10. ……
  11. table_cache=512
  12. ……
  13. myisam_max_sort_file_size=100G
  14. myisam_max_extra_sort_file_size=100G
  15. myisam_sort_buffer_size=128M
  16. key_buffer_size=1024M
  17. read_buffer_size=512M
  18. ……
  19. thread_concurrency=8

#p#

基于反向代理的Web缓存

如Nginx,SQUID,mod_PRoxy(apache2以上又分为mod_proxy和mod_cache)

NGINX的例子:

 
 
 
  1. #user  nobody;
  2. worker_processes  4;
  3. error_log  logs/error.log crit;
  4. pid        logs/nginx.pid;
  5. worker_rlimit_nofile 10240;
  6. events {
  7. use epoll;
  8. worker_connections  51200;
  9. }
  10. http {
  11. include       mime.types;
  12. default_type  application/octet-stream;
  13. sendfile    on;
  14. keepalive_timeout 65;
  15. tcp_nodelay on;
  16. # server pool
  17. upstream bspfrontsvr {
  18. server 10.10.10.224:80   weight=1;
  19. server 10.10.10.221:80   weight=1;
  20. }
  21. upstream bspimgsvr {
  22. server 10.10.10.201:80   weight=1;
  23. }
  24. upstream bspstylesvr {
  25. server 10.10.10.202:80   weight=1;
  26. }
  27. upstream bsphelpsvr {
  28. server 10.10.10.204:80   weight=1;
  29. }
  30. upstream bspwsisvr {
  31. server 10.10.10.203:80   weight=1;
  32. }
  33. upstream bspadminsvr {
  34. server 10.10.10.222:80   weight=1;
  35. }
  36. upstream bspbuyersvr {
  37. server 10.10.10.223:80   weight=1;
  38. }
  39. upstream bspsellersvr {
  40. server 10.10.10.225:80   weight=1;
  41. }
  42. upstream  bsploginsvr  {
  43. server 10.10.10.220:443  weight=1;
  44. }
  45. upstream  bspregistersvr  {
  46. server 10.10.10.220:80  weight=1;
  47. }
  48. log_format  test_com  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
  49. ‘$status $body_bytes_sent “$http_referer” “$http_user_agent” ‘;
  50. #——————————————————————–
  51. #img.test.com
  52. server {
  53. listen       10.10.10.230:80;
  54. server_name  img.test.com;
  55. location / {
  56. proxy_pass      http://bspimgsvr;
  57. include         proxy_setting.conf;
  58. }
  59. access_log  logs/img.log  test_com;
  60. }
  61. #style.test.com
  62. server {
  63. listen       10.10.10.230:80;
  64. server_name  style.test.com;
  65. location / {
  66. proxy_pass      http://bspstylesvr;
  67. include         proxy_setting.conf;
  68. }
  69. access_log  logs/style.log  test_com;
  70. }
  71. #help.test.com
  72. server {
  73. listen       10.10.10.230:80;
  74. server_name  help.test.com;
  75. location / {
  76. proxy_pass      http://bsphelpsvr;
  77. include         proxy_setting.conf;
  78. }
  79. access_log  logs/help.log  test_com;
  80. }
  81. #admin.test.com
  82. server {
  83. listen       10.10.10.230:80;
  84. server_name  admin.test.com;
  85. location / {
  86. proxy_pass      http://bspadminsvr;
  87. include         proxy_setting.conf;
  88. }
  89. access_log  logs/admin.log  test_com;
  90. }
  91. #buyer.test.com
  92. server {
  93. listen       10.10.10.230:80;
  94. server_name  buyer.test.com;
  95. location / {
  96. proxy_pass      http://bspbuyersvr;
  97. include         proxy_setting.conf;
  98. }
  99. access_log  logs/buyer.log  test_com;
  100. }
 
 
 
  1. #seller.test.com
  2. server {
  3. listen       10.10.10.230:80;
  4. server_name  seller.test.com;
  5. location / {
  6. proxy_pass      http://bspsellersvr;
  7. include         proxy_setting.conf;
  8. }
  9. access_log  logs/seller.log  test_com;
  10. }
  11. #wsi.test.com
  12. server {
  13. listen       10.10.10.230:80;
  14. server_name  wsi.test.com;
  15. location / {
  16. proxy_pass      http://bspwsisvr;
  17. include         proxy_setting.conf;
  18. }
  19. access_log  logs/wsi.log  test_com;
  20. }
  21. #www.test.com
  22. server {
  23. listen       10.10.10.230:80;
  24. server_name  www.test.com   *.test.com;
  25. location ~ ^/NginxStatus/ {
  26. stub_status on;
  27. access_log off;
  28. }
  29. location / {
  30. proxy_pass      http://bspfrontsvr;
  31. include         proxy_setting.conf;
  32. }
  33. access_log  logs/www.log  test_com;
  34. error_page   500 502 503 504  /50x.html;
  35. location = /50x.html {
  36. root   html;
  37. }
  38. }
  39. #login.test.com
  40. server {
  41. listen       10.10.10.230:443;
  42. server_name  login.test.com;
  43. ssl                  on;
  44. ssl_certificate      cert.pem;
  45. ssl_certificate_key  cert.key;
  46. ssl_session_timeout  5m;
  47. ssl_protocols  SSLv2 SSLv3 TLSv1;
  48. ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  49. ssl_prefer_server_ciphers   on;
  50. location / {
  51. proxy_pass        https://bsploginsvr;
  52. include         proxy_setting.conf;
  53. }
  54. access_log  logs/login.log  test_com;
  55. }
  56. #login.test.com for register
  57. server {
  58. listen       10.10.10.230:80;
  59. server_name  login.test.com;
  60. location / {
  61. proxy_pass        http://bspregistersvr;
  62. include         proxy_setting.conf;
  63. }
  64. access_log  logs/register.log  test_com;
  65. }
  66. }
  67. proxy_redirect          off;
  68. proxy_set_header        Host $host;
  69. proxy_set_header        X-Real-IP $remote_addr;
  70. proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  71. client_max_body_size    10m;
  72. client_body_buffer_size 128k;
  73. proxy_connect_timeout   90;
  74. proxy_send_timeout      90;
  75. proxy_read_timeout      90;
  76. proxy_buffer_size       4k;
  77. proxy_buffers           4 32k;
  78. proxy_busy_buffers_size 64k;
  79. proxy_temp_file_write_size 64k;

mod_proxy的例子:

 
 
 
  1. ServerName www.zxsv.com
  2. ServerAdmin admin@zxsv.com
  3. # reverse proxy setting
  4. ProxyPass / http://www.zxsv.com:8080/
  5. ProxyPassReverse / http://www.zxsv.com:8080/
  6. # cache dir root
  7. CacheRoot “/var/www/proxy”
  8. # max cache storage
  9. CacheSize 50000000
  10. # hour: every 4 hour
  11. CacheGcInterval 4
  12. # max page expire time: hour
  13. CacheMaxExpire 240
  14. # Expire time = (now – last_modified) * CacheLastModifiedFactor
  15. CacheLastModifiedFactor 0.1
  16. # defalt expire tag: hour
  17. CacheDefaultExpire 1
  18. # force complete after precent of content retrived: 60-90%
  19. CacheForceCompletion 80
  20. CustomLog /usr/local/apache/logs/dev_access_log combined

网页名称:PHP企业级应用缓存技术详解
本文路径:http://www.csdahua.cn/qtweb/news49/260299.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网