微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加速WordPress技巧:Redis缓存输出的HTML页面

Redis一个高级的key-value存储系统,类似memcached,所有内容都存在内存中,因此每秒钟可以超过10万次GET操作。我下面提出的解决方案是在Redis中缓存所有输出的HTML 内容而无需再让wordpress重复执行页面脚本。这里使用Redis代替Varnish设置简单,而且可能更快。安装 Redis如果你使用的是 Debian 或者衍生的操作系统可使用如下命令安装 Redis:apt-get install redis-server或者阅读 安装指南使用 Predis 作为 RedisPHP 客户端你需要一个客户端开发包以便 PHP 可以连接到 Redis 服务上。这里我们推荐 Predis. 上传 predis.PHPwordpress 的根目录。前端缓存的PHP脚本步骤1:在wordpress 的根目录创建新文件 index-with-redis.PHP内容如下:<div class="msgborder" id="PHPcode43"><?php// Change these two variables:$seconds_of_caching = 6060247; // 7 days.$ip_of_this_website = '204.62.14.112';/- This file is written by Jim Westergren,copyright all rights reserved.- See more here: www.jimwestergren.com/wordpress-with-redis-as-a-frontend-cache/- The code is free for everyone to use how they want but please mention my name and link to my article when writing about this.- Change $ip_of_this_website to the IP of your website above.- Add ?refresh=yes to the end of a URL to refresh it's cache- You can also enter the redis client via the command prompt with the command "redis-cli" and then remove all cache with the command "flushdb".*/// Very necessary if you use Cloudfare:if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];}// This is from WordPress:define('WP_USE_THEMES',true);// Start the timer:function getmicrotime($t) {list($usec,$sec) = explode(" ",$t);return ((float)$usec + (float)$sec);}$start = microtime();// Initiate redis and the PHP client for redis:include("predis.php");$redis = new Predis\Client('');// few variables:$current_page_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];$current_page_url = str_replace('?refresh=yes','',$current_page_url);$redis_key = md5($current_page_url);// This first case is either manual refresh cache by adding ?refresh=yes after the URL or somebody posting a commentif (isset($_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('./wp-blog-header.php');$redis->del($redis_key);// Second case: cache exist in redis,let's display it} else if ($redis->exists($redis_key)) {$html_of_current_page = $redis->get($redis_key);echo $html_of_current_page;echo "";// third: a normal visitor without cache. And do not cache a preview page from the wp-admin:} else if ($_SERVER['REMOTE_ADDR'] != $ip_of_this_website && strstr($current_page_url,'preview=true') == false) {require('./wp-blog-header.PHP');$html_of_current_page = file_get_contents($current_page_url);$redis->setex($redis_key,$seconds_of_caching,$html_of_current_page);echo "";// last case: the normal wordpress. Should only be called with file_get_contents:} else {require('./wp-blog-header.PHP');}// Let's display some page generation time (note: CloudFlare may strip out comments):$end = microtime();$t2 = (getmicrotime($end) - getmicrotime($start));if ($_SERVER['REMOTE_ADDR'] != $ip_of_this_website) {echo "";}?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐