萨龙网络
Login
Home-WordPress文章-WordPress,软件系统-正文

AMH面板安装配置redis加速WordPress站点

萨龙龙萨龙龙
WordPress, 软件系统
9年前
0
0
2.58W
AMH面板安装配置redis加速WordPress站点Redis是一个开源、支持网络、基于内存的key-value存储系统,类似memcached,性能极高,支持超过100K+ 每秒的读写频率,一些大型的网站例如ITeye(JavaEye)和CSDN现在都用到了Redis。 与memcached相比,Redis提供了持久化存储,重启了服务器后memcached需要重新创建缓存,而Redis依赖快照进行持久化,即使服务器刚开机启动也不会导致负载陡增。Redis缓存比较适合大流量的Wordpress。 当你的WordPress中的文章达到上万篇,随着流量的增加,Wordpress的服务器压力也随之不断加大,Wordpress发布文章和后台相关的操作都会变得缓慢,这时如果单从硬件上投入来提高Wordpress性能显然不划算。 利用Redis将WordPress页面直接缓存在服务器的内存中,这样在避免了PHP重复执行操作的同时,内存的极速响应能够最大限度地提升Wordpress页面的访问速度,实际测试发现页面执行时间可以降低到0.00X秒级别,比没有使用Redis缓存提升几倍甚至十几倍以上。 用Redis缓存来给WordPress站点加速-适用于Apache和Nginx。

一、AMH面板上安装redis插件

如果你使用的不是AMH面板就使用SSH进行安装redis,在AMH面板需要安装redis+pecl_redis两个软件(支持PHP7),pecl_redis是AMH面板Redis软件的php环境扩展模块。下载安装好后,在应用软件中点击pecl_redis后面的管理,选择需要缓存的环境,安装即可。

二、用Predis.php作为Redis的PHP客户端

1、我们可以使用Predis.php来作为PHP客户端,直接将Predis.php下载并上传到Wordpress的根目录下,CD到Wordpress根目录,执行以下命令:
  1. wget http://uploads.staticjw.com/ji/jim/predis.php
2、这是Predis.php的备份下载:Predis.php下载,手动下载并上传WordPress网站根目录下。

三、安装Redis前端缓存的PHP脚本

1、Redis前端缓存的PHP脚本来自:http://www.jimwestergren.com/wordpress-with-redis-as-a-frontend-cache/,为优化后的版本
  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 
  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 = 0;             // set to 1 if you wish to see execution time and cache actions
  25. $display_powered_by_redis = 0;  // set to 1 if you want to display a powered by redis message with execution time, see below
  26. $start = microtime();   // start timing page exec
  27. // if cloudflare is enabled
  28. if ($cf) {
  29.     if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
  30.         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
  31.     }
  32. }
  33. // from wp
  34. define('WP_USE_THEMES', true);
  35. // init predis
  36. include("predis.php");
  37. $redis = new Predis\Client('');
  38. // init vars
  39. $domain = $_SERVER['HTTP_HOST'];
  40. $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  41. $url = str_replace('?r=y', ''$url);
  42. $url = str_replace('?c=y', ''$url);
  43. $dkey = md5($domain);
  44. $ukey = md5($url);
  45. // check if page isn't a comment submission
  46. (($_SERVER['HTTP_CACHE_CONTROL'] == 'max-age=0') ? $submit = 1 : $submit = 0);
  47. // check if logged in to wp
  48. $cookie = var_export($_COOKIE, true);
  49. $loggedin = preg_match("/wordpress_logged_in/"$cookie);
  50. // check if a cache of the page exists
  51. if ($redis->hexists($dkey$ukey) && !$loggedin && !$submit) {
  52.     echo $redis->hget($dkey$ukey);
  53.     if (!$debugexit(0);
  54.     $msg = 'this is a cache';
  55. // if a comment was submitted or clear page cache request was made delete cache of page
  56. else if ($submit || substr($_SERVER['REQUEST_URI'], -4) == '?r=y') {
  57.     require('./wp-blog-header.php');
  58.     $redis->hdel($dkey$ukey);
  59.     $msg = 'cache of page deleted';
  60. // delete entire cache, works only if logged in
  61. else if ($loggedin && substr($_SERVER['REQUEST_URI'], -4) == '?c=y') {
  62.     require('./wp-blog-header.php');
  63.     if ($redis->exists($dkey)) {
  64.         $redis->del($dkey);
  65.         $msg = 'domain cache flushed';
  66.     } else {
  67.         $msg = 'no cache to flush';
  68.     }
  69. // if logged in don't cache anything
  70. else if ($loggedin) {
  71.     require('./wp-blog-header.php');
  72.     $msg = 'not cached';
  73. // cache the page
  74. else {
  75.     // turn on output buffering
  76.     ob_start();
  77.     require('./wp-blog-header.php');
  78.     // get contents of output buffer
  79.     $html = ob_get_contents();
  80.     // clean output buffer
  81.     ob_end_clean();
  82.     echo $html;
  83.     // store html contents to redis cache
  84.     $redis->hset($dkey$ukey$html);
  85.     $msg = 'cache is set';
  86. }
  87. $end = microtime(); // get end execution time
  88. // show messages if debug is enabled
  89. if ($debug) {
  90.     echo $msg.': ';
  91.     echo t_exec($start$end);
  92. }
  93. // time diff
  94. function t_exec($start$end) {
  95.     $t = (getmicrotime($end) - getmicrotime($start));
  96.     return round($t,5);
  97. }
  98. // get time
  99. function getmicrotime($t) {
  100.     list($usec$sec) = explode(" ",$t);
  101.     return ((float)$usec + (float)$sec);
  102. }
  103. ?>
2、 你也可以直接点击备用下载:index-with-redis.php下载地址,再上传到WordPress根目录下。 3、 如果你正在使用cloudflare,请设置cf = 1; ,如果你想在页面上看到脚本执行时间和缓存加载时间,请设置$debug = 1; display_powered_by_redis = 1表示显示powered_by信息。 4、将index-with-redis.php上传到Wordpress的根目录,如果你使用的是nginx,重命令原来的index.php为任意其它名字,把index-with-redis.php重命名为index.php。 5、如果你使用的是Apache,则需要把.htaccess中出现的index.php替换成index-with-redis.php。 6、所有的操作完成后,你就可以刷新一下Wordpress页面,查看Redis缓存效果了。

四、Wordpress删除Redis页面缓存的方法

1、删除某一个页面的缓存:发表评论、按下F5刷新、在URL后面加上?r=y回车。 2、删除整站页面缓存:登录到Wordpress后台,在任意URL后面加上?r=y回车。 3、更新文章时自动刷新首页缓存:在你的Wordpress的Function.php中加入以下代码
  1. function newPostRefresh() {
  2.     $temp=file_get_contents("http://xxxxxxx/?r=y"); //xxxxxx自己替换
  3. }
  4. add_action('publish_post', 'newPostRefresh');
  5. add_action('edit_post', 'newPostRefresh');
  6. add_action('delete_post', 'newPostRefresh');
  7. add_action('comment_post', 'newPostRefresh');
  8. add_action('edit_comment', 'newPostRefresh');
  9. add_action('delete_comment', 'newPostRefresh');
  10. add_action('wp_set_comment_status', 'newPostRefresh');
  11. add_action('switch_theme', 'newPostRefresh');
4、自动更新Wordpress缓存:在crontab中配置每10分钟用curl访问首页更新缓存,每天凌晨对首页或者分类页面进行更新,AMH可以安装amcrontab软件来进行设置。
  1. */10 * * * * curl http://www.freehao123.com/?r=y 
  2. 1 1 * * * curl http://www.freehao123.com/fenye/?r=y

五、Wordpress Redis缓存使用小结

Wordpress Redis缓存加速效果无疑是明显的,特别页面多访问大的网站博客,在使用Wordpress Redis缓存加速时请禁止其它的所有缓存插件,以免造成不必要的冲突。经过测试Wordpress Redis缓存在使用过程中主要存在的问题就是文章更新时,相应的Tag和分类、首页等内容不会实时更新,我们需要手动更新或者利用自动更新命令。 文章来源:免费资源部落
Tags:
本文原创,作者:萨龙龙,其版权均为萨龙网络所有。
如需转载,请注明出处:https://salongweb.com/amh-redis-wordpress.html
萨龙龙

萨龙龙

侠客
一个平平常常的人,热爱生活、旅行和摄影,骑行去过西藏,一直计划再去。14年从江西骑行来到大理,现栖居于洱海边,食人间烟火,过简单生活,做简约设计!
1342.22M456.67W3.85W
Share:
WordPress循环中判断为每篇文章设计不同的样式
WordPress循环中判断为每篇文章设计不同的样式Previous
翻译WordPress强大实用的Redux框架选项Next
翻译WordPress强大实用的Redux框架选项
相关文章
Total: 114

萨龙网络集成Buddypress+Bbpress社区论坛功能

前段时间已经发布Purity2.0主题更新的文章,主题已经集成了作品展示、商城,通过半个来月的时间把Buddypress+Bbpress社区论坛…
萨龙龙萨龙龙
Bbpress, Buddypress
10年前
0
0
1.75W
0

WordPress 功能函数—— activate_plugins(激活多个插件)

描述 激活多个插件。 当WP_Error返回,但这并不意味着该插件的一个有错误。这意味着一个或多个插件文件路径无效。…
萨龙龙萨龙龙
WordPress Functions
6年前
0
0
8.44K
0

WordPress 功能函数—— add_comments_page(将子菜单页添加到评论主菜单上)

描述 此函数具有一个功能,该功能将用于确定菜单中是否包含页面。 连接到处理页面输出的函数也必须检查用户是否具有所需的…
萨龙龙萨龙龙
WordPress Functions
6年前
0
0
1.76W
0

WooCommerce 3 更新后特色产品的获取方法

WooCommerce已经是WordPress平台最好最强大的在线商城插件,已经被WordPress收购,更新速度比较频繁,功能更加完…
萨龙龙萨龙龙
WooCommerce
8年前
0
0
1.14W
0

wordpress自定义域函数get_post_custom_values多个值循环

自定义域在Wordpress中有着相当重的份量,很多功能都可以在其中实现,最近有朋友要萨龙龙添加两个功能,一是缩略图使用自定义域来获取(支持外链…
萨龙龙萨龙龙
WordPress
10年前
0
0
1.05W
0

删除或失效WordPress文章中的图像大小属性

默认情况下,WordPress会将图像元素width和height属性添加到图像元素中。这些属性会影响CSS宽度和高度属性,图片延迟加载时默认图…
萨龙龙萨龙龙
WordPress, 前端资讯
6年前
0
0
1.14W
0

WordPress 功能函数—— add_clean_index(向指定的表添加索引)

描述 向指定的表添加索引。 用法 add_clean_index(string$table,st…
萨龙龙萨龙龙
WordPress Functions
6年前
0
0
9.42K
0

WordPress MU多站点网络克隆新站点插件Multisite Cloner

WordpressMU多站点已经使用很久,在本地测试和主机上安装的都是多站点,极大的方便网站搭建以及主题开发。当我们有多个站点,需要创建的新站…
萨龙龙萨龙龙
WordPress
10年前
0
0
1.93W
0

WoSign沃通SSL证书免费申请与AMH云主机面板安装设置

萨龙网络集成了WooCommerce商城,准备添加信用卡和微信支付,都在测试当中,信用卡支付使用WooCommercePayPalProP…
萨龙龙萨龙龙
软件系统
10年前
0
0
1.34W
0

在WooCommerce中添加“立即购买”按钮直接跳转到结算页面

MNews主题集成了WooCommerce商城插件,有些用户要求增加一个『立即购买』按钮,这篇文章介绍下如何在WooCommerce中添加…
萨龙龙萨龙龙
WooCommerce
7年前
0
0
3.10W
0

WordPress 功能函数—— add_blog_option(为指定的博客ID添加新选项)

描述 您不需要序列化值。如果需要序列化值,则在将其插入数据库之前将其序列化。请记住,资源不能序列化或作为选项添加。 …
萨龙龙萨龙龙
WordPress Functions
6年前
0
0
1.02W
0

WordPress 从不需要的页面禁用 WooCommerce 样式和脚本

WooCommerce在每个页面上加载三个核心CSS样式表,并在WordPress站点上安装时发布。可以通过从不需要它的页面和内容中删除样式和…
萨龙龙萨龙龙
WooCommerce
6年前
0
0
1.73W
0
评论表单游客 您好,欢迎参与讨论。
Enter nickname
Enter email
Enter website
0 / 0
评论列表
Total: 0
萨龙网络
No relevant content