加入收藏 | 设为首页 | 会员中心 | 我要投稿 舟山站长网 (https://www.0580zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

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

发布时间:2022-06-22 11:23:05 所属栏目:教程 来源:互联网
导读:Redis是一个高级的keyvalue存储系统,类似memcached,所有内容都存在内存中,因此每秒钟可以超过10万次GET操作。 我下面提出的解决方案是在Redis中缓存所有输出的HTML内容而无需再让WordPress重复执行页面脚本。这里使用Redis代替Varnish设置简单,而且可
  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,内容如下
 
  Changethesetwovariables:
  
  $seconds_of_caching=60 60 24 7;7days.
  
  $ip_of_this_website='204.62.14.112';
  
  ThisfileiswrittenbyJimWestergren,copyrightallrightsreserved.
  
  Seemorehere:jimwestergrenwordpresswithredisasafrontendcache
  
  Thecodeisfreeforeveryonetousehowtheywantbutpleasementionmynameandlinktomyarticlewhenwritingaboutthis.
  
  Change$ip_of_this_websitetotheIPofyourwebsiteabove.
  
  Add?refresh=yestotheendofaURLtorefreshit'scache
  
  Youcanalsoentertheredisclientviathecommandpromptwiththecommand"rediscli"andthenremoveallcachewiththecommand"flushdb".
  
  VerynecessaryifyouuseCloudfare:
  
  ifisset$_SERVER['HTTP_CF_CONNECTING_IP']{
  
  $_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_CF_CONNECTING_IP'];
  
  }
  
  ThisisfromWordPress:
  
  define'WP_USE_THEMES',true;
  
  Startthetimer:
  
  functiongetmicrotime$t{
  
  list$usec,$sec=explode"",$t;
  
  returnfloat$usec+float$sec;
  
  }
  
  $start=microtime;
  
  InitiateredisandthePHPclientforredis:
  
  include"predis";
  
  $redis=newPredisClient'';
  
  fewvariables:
  
  $current_page_url="".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  
  $current_page_url=str_replace'?refresh=yes','',$current_page_url;
  
  $redis_key=md5$current_page_url;
  
  Thisfirstcaseiseithermanualrefreshcachebyadding?refresh=yesaftertheURLorsomebodypostingacomment
  
  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{
  
  require'.wpblogheader';
  
  $redisdel$redis_key;
  
  Secondcase:cacheexistinredis,let'sdisplayit
  
  }elseif$redisexists$redis_key{
  
  $html_of_current_page=$redisget$redis_key;
  
  echo$html_of_current_page;
  
  echo"!Thisiscache
  
  third:anormalvisitorwithoutcache.Anddonotcacheapreviewpagefromthewpadmin:
  
  }elseif$_SERVER['REMOTE_ADDR']!=$ip_of_this_websitestrstr$current_page_url,'preview=true'==false{
  
  require'.wpblogheader';
  
  $html_of_current_page=file_get_contents$current_page_url;
  
  $redissetex$redis_key,$seconds_of_caching,$html_of_current_page;
  
  echo"!Cachehasbeenset
  
  lastcase:thenormalWordPress.Shouldonlybecalledwithfile_get_contents:
  
  }else{
  
  require'.wpblogheader';
  
  }
  
  Let'sdisplaysomepagegenerationtimenote:CloudFlaremaystripo utcomments:
  
  $end=microtime;
  
  $t2=getmicrotime$endgetmicrotime$start;
  
  if$_SERVER['REMOTE_ADDR']!=$ip_of_this_website{
  //phpfensi.com
  echo"!CachesystembyJimWestergren.Pagegeneratedin".round$t2,5."seconds.
  
  }
  或者直接下载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.

(编辑:舟山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!