PHP缓存技术实例

内存缓存

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

 

 

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

读库的例子:

<?php

  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之类的。

[client]

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

基于反向代理的Web缓存

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

NGINX的例子:

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

mod_proxy的例子:

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