type
status
date
slug
summary
tags
category
icon
password

问题分析

 
在监控中查看7天数据
发现key总数不变,每日按的过期数量和设置过期个数都比较规律。再结合业务代码,可判断是由于有大量key未设置过期时间,且存在着大量的垃圾数据,不会再次访问,导致内存不断增长。
 
notion image

解决方案

 
1、redis的默认淘汰策略是内存淘汰策略即不会删除任何数据,拒绝所有写入操作
可修改为 allkeys-lru:根据 LRU 算法删除键,不管数据是否设置超时属性,优先淘汰最近最少使用的键,直到腾出足够空间为止。(结合自己的业务逻辑)
缺点: 不能有效降低内存占用
 
2、使用lua脚本,找出没设置过期时间的key,删除或者设置一个过期时间。
缺点:直接删除数据,可能会影响服务稳定。可改为给这个key设置一个随机的过期时间。避免缓存穿透。
可以参考项目使用脚本删除