Heim >Backend-Entwicklung >PHP-Tutorial >mysql - php数据库缓存设计

mysql - php数据库缓存设计

WBOY
WBOYOriginal
2016-07-06 13:54:021010Durchsuche

比如要显示一个类目下所有子项的浏览量总和 但不可能用户访问一次就统计一次 太耗费资源 请大神指点下 如何实现隔一段时间自己才会再次统计

回复内容:

比如要显示一个类目下所有子项的浏览量总和 但不可能用户访问一次就统计一次 太耗费资源 请大神指点下 如何实现隔一段时间自己才会再次统计

<code class="php">$redis = new redis();
$pv = "select pv from views where id={$id}";//第一次的pv值
$num = 100;// 累计100更新数据库
$incrPv = $redis->incr('pv:'.$id);
if ($incrPv % $num === 0) {
    $sql = "update views set pv=pv+{$num} where id = {$id}";
} else if ($incrPv == 1) {
   $incrPv = $pv + 1;
   $redis->set('pv:'.$id, $incrPv);
}
</code>

写个定时脚本统计出老数据
统计浏览数量可以用redis做缓存

实时统计写到redis或其他nosql数据库里面,crontab定时计算并清空nosql
在线执行PHP代码

很简单,只要在你设置显示对应类目下子项浏览量的地方设置缓存就可以了。

比如我举这样一个例子:

<code>// 这个方法是你说的统计一个父类下对应所有子类的浏览量的综合,`$time`是设置的缓存时间
function getCategoryNum($categoryId, $time=3600){
    // 根据父类id统计所有子类的浏览量
}

// 这个是每次访问时统计到你数据库或者缓存的地方的方法。这个方法是不用设置缓存的,因为每次都要做统计
function getViewsNum(){
    // 用户访问浏览量+1操作
}</code>

通过上面的getCategoryNum()方法设置了缓存时间,在缓存时间内是不会去请求数据库的,只有时间到了才会去请求数据库获取最新的统计,这就是根绝你设置的时间来看的了。

如何设置缓存你项目中应该有的吧!如果要去做定时任务,我觉得有点浪费了。当然我并不确定你具体的业务需求,一切以你的业务需求为准。希望对你有帮助

如果说不打算用其他缓存技术的话,可以使用mysql进行缓存,缓存结构大致为Key,Value,最后更新时间,如果超过这个时间的话就进行更新,需要注意的是写入的时候需要考虑是否校验写入版本的一致性

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn