前几天生产的Redis突然挂掉了,之前都没有太注意过Redis那边的使用情况,这次Redis挂掉重启后,发现在那台服务器上,Redis占用了足足30G的运行内存,这才意识到Redis可能出现了一点问题,然后开始了错误排查过程。
错误排查
由于Redis是基于内存的数据库,所以当出现运行内存过大的情况,首先应该考虑检查Redis的数据占用情况。
使用Redis监控工具RedisInsight对内存使用情况进行检查
在Memory Analyse模块,填入Redis的RDB文件目录,等待片刻后就能在Overview模块看到相关指标信息。
从图上可以看到内存在Database3的使用达到了28个G,同时由于Redis不支持针对hash的键进行过期设置,在业务逻辑中有定时任务会定期执行redis的数据清理。但是可见定期删除的任务并没有执行,导致了数据一直在往上增,导致了Redis的内存使用越来越大,最后挂掉。
问题解决
重新检查了一下定时任务,确定了是定时任务没有正常执行,修改了业务逻辑后,缓存正常清理,Redis内存使用恢复正常。
正常而言,Redis中的缓存都应该设置对应的过期时间及相应的淘汰策略,像这种问题属于比较低级的日常检查不到位了。