通过redis加速wordpress

  • A+
所属分类:资源分享

首先将你的index.php文件做个备份,建议更名为index.php.bak(实际上这个文件用处不太大,直接删除都行,不信你自己看内容)

然后将下面的内容,保存为index.php,并且上传到根目录:

  1. <?php
  2. /*
  3.     author: jeedo aquino
  4.     file: wp-index-redis.php
  5.     credit: jim westergren
  6.     updated: 2012-10-23
  7.     this is a redis caching system for wordpress inspired by jim westergren.
  8.     see more here: www.jimwestergren.com/wordpress-with-redis-as-a-frontend-cache/
  9.     some caching mechanics are different from jim's script which is summarized below:
  10.     - cached pages do not expire not unless explicitly deleted or reset
  11.     - appending a ?c=y to a url deletes the entire cache of the domain, only works when you are logged in
  12.     - appending a ?r=y to a url deletes the cache of that url
  13.     - script still works even if allow_fopen is disabled
  14.     - submitting a comment deletes the cache of that page
  15.     - refreshing (f5) a page deletes the cache of that page
  16.     - includes a debug mode, stats are displayed at the bottom most part after </html>
  17.     for setup and configuration see more here:
  18.     www.jeedo.net/lightning-fast-wordpress-with-nginx-redis/
  19.     use this script at your own risk. i currently use this albeit a slightly modified version
  20.     to display a redis badge whenever a cache is displayed.
  21. */
  22. // change vars here
  23. $cf = 0;                // set to 1 if you are using cloudflare
  24. $debug = 1;             // set to 1 if you wish to see execution time and cache actions
  25. $start = microtime();   // start timing page exec
  26. // if cloudflare is enabled
  27. if ($cf) {
  28.     if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
  29.         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
  30.     }
  31. }
  32. // from wp
  33. define('WP_USE_THEMES', true);
  34. // init predis
  35. include("predis.php");
  36. $redis = new Predis\Client('');
  37. // init vars
  38. $domain = $_SERVER['HTTP_HOST'];
  39. $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  40. $url = str_replace('?r=y', ''$url);
  41. $url = str_replace('?c=y', ''$url);
  42. $dkey = md5($domain);
  43. $ukey = md5($url);
  44. // check if page isn't a comment submission
  45. (($_SERVER['HTTP_CACHE_CONTROL'] == 'max-age=0') ? $submit = 1 : $submit = 0);
  46. // check if logged in to wp
  47. $cookie = var_export($_COOKIE, true);
  48. $loggedin = preg_match("/wordpress_logged_in/"$cookie);
  49. // check if a cache of the page exists
  50. if ($redis->hexists($dkey$ukey) && !$loggedin && !$submit) {
  51.     echo $redis->hget($dkey$ukey);
  52.     if (!$debugexit(0);
  53.     $msg = 'this is a cache';
  54. // if a comment was submitted or clear page cache request was made delete cache of page
  55. else if ($submit || substr($_SERVER['REQUEST_URI'], -4) == '?r=y') {
  56.     require('./wp-blog-header.php');
  57.     $redis->hdel($dkey$ukey);
  58.     $msg = 'cache of page deleted';
  59. // delete entire cache, works only if logged in
  60. else if ($loggedin && substr($_SERVER['REQUEST_URI'], -4) == '?c=y') {
  61.     require('./wp-blog-header.php');
  62.     if ($redis->exists($dkey)) {
  63.         $redis->del($dkey);
  64.         $msg = 'domain cache flushed';
  65.     } else {
  66.         $msg = 'no cache to flush';
  67.     }
  68. // if logged in don't cache anything
  69. else if ($loggedin) {
  70.     require('./wp-blog-header.php');
  71.     $msg = 'not cached';
  72. // cache the page
  73. else {
  74.     // turn on output buffering
  75.     ob_start();
  76.     require('./wp-blog-header.php');
  77.     // get contents of output buffer
  78.     $html = ob_get_contents();
  79.     // clean output buffer
  80.     ob_end_clean();
  81.     echo $html;
  82.     // store html contents to redis cache
  83.     $redis->hset($dkey$ukey$html);
  84.     $msg = 'cache is set';
  85. }
  86. $end = microtime(); // get end execution time
  87. // show messages if debug is enabled
  88. if ($debug) {
  89.     echo "<div id=\"redis_powered\"><div>$msg : ".t_exec($start$end)." sec</div></div>";
  90. }
  91. // time diff
  92. function t_exec($start$end) {
  93.     $t = (getmicrotime($end) - getmicrotime($start));
  94.     return round($t,5);
  95. }
  96. // get time
  97. function getmicrotime($t) {
  98.     list($usec$sec) = explode(" ",$t);
  99.     return ((float)$usec + (float)$sec);
  100. }
  101. ?>

还需要一个文件predis.php,已经打包好了,直接下载即可(猜猜下载地址在哪)

最后在你主题的style.css末尾添加如下代码:

  1. #redis_powered{margin:0px auto;background:url(https://birdteam.net/wp-content/themes/begin/img/redis.png) 10px no-repeat #fff;border:1px solid #D7D8DF;padding:10px;width:320px;}
  2. #redis_powered div{width:300px;text-align:right;font:9px/10px arial,sans-serif;color:#000;}
  • 问答中心
  • 微信小程序扫一扫
  • weinxin
  • 微信公众
  • 微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:24   其中:访客  24   博主  0

    • avatar read

      Good info. Lucky me I reach on your website by accident, I bookmarked it.

      • avatar buy eco friendly shirts

        Normally I do not read post on blogs, however I would like to say that this write-up very forced me to try and do it! Your writing taste has been amazed me. Thank you, quite great post.

        • avatar visit website

          Wonderful work! This is the type of info that should be shared around the web. Shame on Google for not positioning this post higher! Come on over and visit my website . Thanks =)

          • avatar grolyrtolemcs

            Perfectly pent content material, thankyou for information .