首页    >    新闻资讯    >   使用内存缓存提高 Postviews 效率

使用内存缓存提高 Postviews 效率

使用 WP-Postview 插件进行日志浏览数统计的时候,会有个问题,就是每个页面会多出三个 SQL 查询。这样每次浏览日志都会多出三次查询,对数据库其实是一次蛮大的负担,有没有办法解决这个问题呢?如果你和我一样网站启用了 Memcached 这类内存缓存组件的话,我们可以把日志的流量缓存到内存中,每次增加10次浏览才写入数据库中去。

<?php
/*
Plugin Name: WPJAM Memcached PostView
Description: 使用内存缓存提高 WP-Postviews 效率
Version: 0.1
Author: Denis
*/
add_action('init','wpjam_postviews');
function wpjam_postviews(){
if(function_exists('the_views')){ //已经安装了 postview 插件
global $wp_object_cache;
if(isset($wp_object_cache->mc) &#038;&#038; $wp_object_cache->mc){ //已经安装了 memcached 插件
add_filter('update_post_metadata','wpjam_postviews_update_post_metadata',10,5);
function wpjam_postviews_update_post_metadata($check, $object_id, $meta_key, $meta_value, $prev_value ){
if($meta_key == 'views'){
wp_cache_set($object_id, $meta_value,'views');
$cached_post_views = 10;
if($meta_value%$cached_post_views == 0){ //每增加 10 次浏览才写入数据库中去
return $check;
}else{
return true;
}
}else{
return $check;
}
}

add_filter('get_post_metadata','wpjam_postviews_get_post_metadata',10,4);
function wpjam_postviews_get_post_metadata($check, $object_id, $meta_key, $single ){
if($meta_key == 'views' ){
$views = wp_cache_get($object_id,'views'); //显示的时候直接从内存中获取
if($views === false){
return $check;
}else{
return $views;
}
}elseif($meta_key == ''){
$views = wp_cache_get($object_id,'views');
if($views === false){
return $check;
}else{
$meta_cache = wp_cache_get($object_id, 'post_meta');
if ( !$meta_cache ) {
$meta_cache = update_meta_cache( 'post', array( $object_id ) );
$meta_cache = $meta_cache[$object_id];
}
$meta_cache['views'][0] = $views;
return $meta_cache;
}
}else{
return $check;
}
}
}
}
}

将上面的代码复制到当前主题的 funtions.php 文件中,或者直接当做一个插件上传激活即可。

使用内存缓存日志的浏览数,如果不小心把将内存缓存的数据清掉,日志的浏览数会丢失一部分,但是肯定少于10了。

作者:Denis

来源:我爱水煮鱼

分类:新闻资讯

标签:, , ,

* 版权声明:作者WordPress啦! 转载请注明出处。