当前位置:首页 > CMS教程 > WordPress > 列表

让WordPress使用Redis缓存来进行加速

发布:smiling 来源: PHP粉丝网  添加日期:2018-12-04 09:33:07 浏览: 评论:0 

Redis是一个高级的keyvalue存储系统,类似memcached,所有内容都存在内存中,因此每秒钟可以超过10万次GET操作。

我下面提出的解决方案是在Redis中缓存所有输出的HTML内容而无需再让WordPress重复执行页面脚本。这里使用Redis代替Varnish设置简单,而且可能更快。

安装Redis

如果你使用的是Debian或者衍生的操作系统可使用如下命令安装Redis

aptgetinstallredisserver

或者阅读安装指南

使用Predis作为Redis的PHP客户端

你需要一个客户端开发包以便PHP可以连接到Redis服务上。

这里我们推荐Predis.上传predis到WordPress的根目录。

前端缓存的PHP脚本

步骤1 在WordPress的根目录创建新文件withredis,内容如下

  1. Changethesetwovariables: 
  2.  
  3. $seconds_of_caching=60 60 24 7;7days. 
  4.  
  5. $ip_of_this_website='204.62.14.112'; 
  6.  
  7. ThisfileiswrittenbyJimWestergren,copyrightallrightsreserved. 
  8.  
  9. Seemorehere:jimwestergrenwordpresswithredisasafrontendcache 
  10.  
  11. Thecodeisfreeforeveryonetousehowtheywantbutpleasementionmynameandlinktomyarticlewhenwritingaboutthis. 
  12.  
  13. Change$ip_of_this_websitetotheIPofyourwebsiteabove. 
  14.  
  15. Add?refresh=yestotheendofaURLtorefreshit'scache 
  16.  
  17. Youcanalsoentertheredisclientviathecommandpromptwiththecommand"rediscli"andthenremoveallcachewiththecommand"flushdb". 
  18.  
  19. VerynecessaryifyouuseCloudfare: 
  20.  
  21. ifisset$_SERVER['HTTP_CF_CONNECTING_IP']{ 
  22.  
  23. $_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_CF_CONNECTING_IP']; 
  24.  
  25. } 
  26.  
  27. ThisisfromWordPress: 
  28.  
  29. define'WP_USE_THEMES',true; 
  30.  
  31. Startthetimer: 
  32.  
  33. functiongetmicrotime$t{ 
  34.  
  35. list$usec,$sec=explode"",$t; 
  36.  
  37. returnfloat$usec+float$sec; 
  38.  
  39. } 
  40.  
  41. $start=microtime; 
  42.  
  43. InitiateredisandthePHPclientforredis: 
  44.  
  45. include"predis"; 
  46.  
  47. $redis=newPredis\Client''; 
  48.  
  49. fewvariables: 
  50.  
  51. $current_page_url="".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
  52.  
  53. $current_page_url=str_replace'?refresh=yes','',$current_page_url; 
  54.  
  55. $redis_key=md5$current_page_url; 
  56.  
  57. Thisfirstcaseiseithermanualrefreshcachebyadding?refresh=yesaftertheURLorsomebodypostingacomment 
  58.  
  59. ifisset$_GET['refresh']||substr$_SERVER['REQUEST_URI'],12=='?refresh=yes'||$_SERVER['HTTP_REFERER']==$current_page_url$_SERVER['REQUEST_URI']!=''$_SERVER['REMOTE_ADDR']!=$ip_of_this_website{ 
  60.  
  61. require'.wpblogheader'; 
  62.  
  63. $redisdel$redis_key; 
  64.  
  65. Secondcase:cacheexistinredis,let'sdisplayit 
  66.  
  67. }elseif$redisexists$redis_key{ 
  68.  
  69. $html_of_current_page=$redisget$redis_key; 
  70.  
  71. echo$html_of_current_page; 
  72.  
  73. echo"!Thisiscache 
  74.  
  75. third:anormalvisitorwithoutcache.Anddonotcacheapreviewpagefromthewpadmin: 
  76.  
  77. }elseif$_SERVER['REMOTE_ADDR']!=$ip_of_this_websitestrstr$current_page_url,'preview=true'==false{ 
  78.  
  79. require'.wpblogheader'; 
  80.  
  81. $html_of_current_page=file_get_contents$current_page_url; 
  82.  
  83. $redissetex$redis_key,$seconds_of_caching,$html_of_current_page; 
  84.  
  85. echo"!Cachehasbeenset 
  86.  
  87. lastcase:thenormalWordPress.Shouldonlybecalledwithfile_get_contents: 
  88.  
  89. }else{ 
  90.  
  91. require'.wpblogheader'; 
  92.  
  93. } 
  94.  
  95. Let'sdisplaysomepagegenerationtimenote:CloudFlaremaystripo utcomments: 
  96.  
  97. $end=microtime; 
  98.  
  99. $t2=getmicrotime$endgetmicrotime$start; 
  100.  
  101. if$_SERVER['REMOTE_ADDR']!=$ip_of_this_website{ 
  102. //phpfensi.com 
  103. echo"!CachesystembyJimWestergren.Pagegeneratedin".round$t2,5."seconds. 
  104.  
  105. } 

或者直接下载withredis

步骤2 将上述代码中的IP替换成你的IP

步骤3 在.htaccess中将所有出现的地方改为withredis,如果你使用的是Nginx则修改nginx.conf中的为withredis并重载Nginx killallsHUPnginx。

性能测试

1.没有Redis的情况下,平均执行1.614秒,页0.174秒无任何缓存插件

2.使用Redis的情况下,平均页面执行时间0.00256秒

我已经在我的博客中使用了如上的方法进行加速很长时间了,一切运行良好。

其他建议

我的环境是Nginx+PHPFPM+APC+Cloudflare+Redis.安装在一个nanoVPS中,无缓存插件。

请确认使用了gzip压缩,可加快访问速度。

访问wpadmin

要访问wpadmin必须使用wpadmin代替原来的wpadmin.

Tags: WordPress加速 Redis缓存

分享到: