话说大家都怎么维护缓存的?

$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

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 15

都可以啊
但是你这个写法代码毫无可读性 :grin: 别人看了也不知道怎么改

1个月前 评论
IT学徒 (楼主) 1个月前
唐章明 1个月前

不用, 1-3ms的优化换心智负担,有点亏。

1个月前 评论
IT学徒 (楼主) 1个月前

你需要这个包,简单又好用,读起来和写起来没有负担:composer require watson/rememberable

1个月前 评论
IT学徒 (楼主) 1个月前

你可以使用 observer 监听,或者封装一层service 用去更新、读取,service 维护缓存

1个月前 评论

在枚举里面实现,多人合作项目的时候大家经常乱取key的,直接在一个文件统一维护,后面改也方便

file

1个月前 评论
xujinhui (作者) 1个月前
IT学徒 (楼主) 1个月前
IT学徒 (楼主) 1个月前

你的key是这样的:md5($request->route()->getName().’_top_project’),后面如果缓存键多了redis检索会很慢的。 最好用冒号分割,相当于取了一个命名空间top_project。这样缓存可以更精确地指定匹配的范围,减少了需要遍历的键的数量,提升性能。 'top_project:'.md5($request->route()->getName())

1个月前 评论

spatie/laravel-responsecache

1个月前 评论

1、使用observer监听用户模型 的增删改,只要有就删, 2、重写用户模形的find 3、列表真没有必要缓存 4、列表一般是后台用,分页慢是因为limit等sql语句的原因,换一种分页方式,如用id增序,条件加上id > 指定id来做条件限制在配合永久的limit(固定条数),仅对count做缓存即可,建议连count都不要,就上一页下一页,最后列表都卡了,数据不小了,可以同时集成es这些来做查询了,

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!