解决开启Redis缓存时 WP-Postviews 1.7x 不计数的问题

  • A+
所属分类:WordPress

Redis是一个开源、支持网络、基于内存的key-value存储系统,类似memcached,性能极高,支持超过100K+ 每秒的读写频率,一些大型的网站例如ITeye(JavaEye)和CSDN现在都用到了Redis。

利用Redis将WordPress页面直接缓存在服务器的内存中,这样在避免了PHP重复执行操作的同时,内存的极速响应能够最大限度地提升Wordpress页面的访问速度,实际测试发现页面执行时间可以降低到0.00X秒级别,比没有使用Redis缓存提升几倍甚至十几倍以上。

WordPress简单又功能强大让大家爱不释手,但也导致了WordPress在架构大型网站和博客时成为了消耗资源“大户”,如何让Wordpress更好更有效率地运行,是我们一直不断追求的目标

Redis的缓存可以有效地对动态网页进行缓存,降低主机资源的使用率,使得网站更加稳定。但是,Redis也会导致别的插件工作不正常,比如这个统计访问次数的WP PostViews插件。

Redis将WordPress页面直接缓存在服务器的内存中,然后php直接访问内存来加速,在有新评论和新文章时会更新缓存,而 WP-Postviews 原理是每次访问给meta加1,启用cache后不调用php文件了,所以自然不会计数。于是插件的作者通过ajax来增加计数。

我们以WP PostViews 1.74为例。

一、编辑Wordpress的配置文件

不管你使用的何种缓存插件或者缓存技术,如Redis,cos-html-cache,WP Super Cache,memcached或Nginx-Helper,Nginx Fastcgi_cache等,如果你想使用wp-postviews插件Ajax统计功能,那么,第一步就是打开Wordpress根目录的 wp-config.php 配置文件,在配置文件最后添加上:

这样,wp-postviews插件的设置中,才会出现ajax统计方式。

二、使用wp-postviews插件ajax统计方式

完成第一步后,刷新下后台,打开PostViews的设置页面中,点击允许使用Ajax进行计数统计,如下图:

解决开启Redis缓存时 WP-Postviews 1.7x 不计数的问题

如果不进行第一步,这个设置选项是不会出现的。

然后重新生成下缓存,就OK了。

这时候每次点击的时候后台会更新显示数,但是前台不会更新,下面我们来解决这个问题。

三、解决前台统计更新落后的问题

BTW:此方法未验证

可以通过AJAX和DOM操作来解决。

1、把下面的代码添加到 wp-postviews.php 文件尾部:

2、下面代码添加到 postviews-cache.js 文件尾部:

3、Wordpress模版文件中默认的调用方法是:

现在替换为:

这时候我们发现,文章页是正常计数的而且实时刷新,但是首页还是不行啊,这个没办法了,不过可以通过设置缓存插件,不缓存首页,这样就完美解决问题了。

发表评论

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