首页 > CMS > Wordpress > 正文

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

2024-09-07 00:52:43
字体:
来源:转载
供稿:网友

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. ThisisfromWordPress: 
  27.  
  28. define'WP_USE_THEMES',true; 
  29.  
  30. Startthetimer: 
  31.  
  32. functiongetmicrotime$t
  33.  
  34. list$usec,$sec=explode"",$t
  35.  
  36. returnfloat$usec+float$sec
  37.  
  38.  
  39. $start=microtime; 
  40.  
  41. InitiateredisandthePHPclientforredis: 
  42.  
  43. include"predis"
  44.  
  45. $redis=newPredis/Client''
  46.  
  47. fewvariables: 
  48.  
  49. $current_page_url="".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
  50.  
  51. $current_page_url=str_replace'?refresh=yes','',$current_page_url
  52.  
  53. $redis_key=md5$current_page_url
  54.  
  55. Thisfirstcaseiseithermanualrefreshcachebyadding?refresh=yesaftertheURLorsomebodypostingacomment 
  56.  
  57. 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
  58.  
  59. require'.wpblogheader'
  60.  
  61. $redisdel$redis_key
  62.  
  63. Secondcase:cacheexistinredis,let'sdisplayit 
  64.  
  65. }elseif$redisexists$redis_key
  66.  
  67. $html_of_current_page=$redisget$redis_key
  68.  
  69. echo$html_of_current_page
  70.  
  71. echo"!Thisiscache 
  72.  
  73. third:anormalvisitorwithoutcache.Anddonotcacheapreviewpagefromthewpadmin: 
  74.  
  75. }elseif$_SERVER['REMOTE_ADDR']!=$ip_of_this_websitestrstr$current_page_url,'preview=true'==false{ 
  76.  
  77. require'.wpblogheader'
  78.  
  79. $html_of_current_page=file_get_contents$current_page_url
  80.  
  81. $redissetex$redis_key,$seconds_of_caching,$html_of_current_page
  82.  
  83. echo"!Cachehasbeenset 
  84.  
  85. lastcase:thenormalWordPress.Shouldonlybecalledwithfile_get_contents: 
  86.  
  87. }else
  88.  
  89. require'.wpblogheader'
  90.  
  91.  
  92. Let'sdisplaysomepagegenerationtimenote:CloudFlaremaystripo utcomments: 
  93.  
  94. $end=microtime; 
  95.  
  96. $t2=getmicrotime$endgetmicrotime$start
  97.  
  98. if$_SERVER['REMOTE_ADDR']!=$ip_of_this_website
  99. //Vevb.com 
  100. echo"!CachesystembyJimWestergren.Pagegeneratedin".round$t2,5."seconds. 
  101.  

或者直接下载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.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表