php缓存mysql表_mysql - 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);

}

写个定时脚本统计出老数据

统计浏览数量可以用redis做缓存

实时统计写到redis或其他nosql数据库里面,crontab定时计算并清空nosql

在线执行PHP代码

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

比如我举这样一个例子:

// 这个方法是你说的统计一个父类下对应所有子类的浏览量的综合,`$time`是设置的缓存时间

function getCategoryNum($categoryId, $time=3600){

// 根据父类id统计所有子类的浏览量

}

// 这个是每次访问时统计到你数据库或者缓存的地方的方法。这个方法是不用设置缓存的,因为每次都要做统计

function getViewsNum(){

// 用户访问浏览量+1操作

}

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

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

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

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值