最近公司现网查询速度极慢,原因是因为有一个调度频繁查询产品详情,经理安排进行优化
笔者第一时间想到的是使用缓存,但因为生产环境产品信息量将近上千条热点数据,为防止撑爆服务器内存,考虑到了使用redis缓存。代码实现如下
1、先在详情查询接口添加缓存注解
2、在所有需要更新缓存信息的地方,添加删除缓存注解
注意,坑就在这个allEntries注解!
先通过info命令查询发现redis内存占用才1g,而我们线上redis内存有5g多。那么考虑是否是因为某些查询过慢导致的读取超时呢?
慢查询记录数
slowlog len
获取慢查询数量前几条数据
slowlog get n
发现查询有一个get qryProdDeatil* 的命令查询耗时极慢,速度排行第一.
!!! 至此结果已经出来了,因为@CacheEvict注解
的allEntries属性设置为true,会去删除redis里的整个分区的缓存key(以某一字符串开头),导致模糊匹配,数据未在规定的缓存超时时间返回。