话说大家都是怎么维护查询缓存的
$data[‘top_project’] = Cache::remember(md5($request->route()->getName().’_top_project’),config(‘app.debug’) == true ? 100 : 864000,function(){
return Project::query()
->from(‘project as p’)
->where(‘p.is_del’,0)
->where(‘p.project_status’,2)
->orderBy(‘views’,’desc’)
->select([‘id’,’project_title’,’budget_upper_limit’])
->limit(10)
->get();
});
如上所示,对查询结果进行了缓存,大家都是怎么维护这个缓存的,我目前采用的方案是当数据有新增的时候删除这个缓存 key
为啥要给缓存键做哈希哪?虽然16的32次方概率很低但哈希还是会碰撞的。
就是数据同步的问题嘛,无论是先更新数据库再更新缓存,或者先更新缓存再更新数据库都不可能保证100%的准确性,不过一般正常使用,不涉及到太多的数据量,基本都够了。
但是上述可能会存在问题,假如当你删除缓存数据的同时,用户刚好访问到了缓存数据,如果没做处理,那么就会报错。如果做了处理,没有就去数据库里拿并缓存起来,当大量请求的时候,所有的请求都会落到数据库,所以这里需要思考一下怎么处理。
还有,如同上一楼的朋友所说的,为啥缓存的键还要做哈希的问题。
laravel-model-caching
越多越难维护, 我是这么觉得,反正我没维护的多好
刚好前段时间从Google找到一个比较合适的缓存维护方案,根据我自身使用情况结合了一下,代码排版凑合看看吧
每一个缓存类继承CacheBuilder
试用