背景
在我们向redis中添加key-value的时候,会指定过期时间,如果key过期了,那么redis会如何处理这些过期的key呢?
触发条件
触发redis删除策略的事件是 key过期了
删除策略
1、定期删除策略
概念:定时任务隔一段时间,就随机抽取部分设置了过期时间的 key,检查其是否过期,如果过期就删除, 存在的问题:定期删除可能会导致很多过期 key 到了时间并没有被删除掉。
2、惰性删除策略
概念:当一些客户端尝试访问这个key的时候,如果key过期,那么就把这个key删除。惰性删除相当于将删除的权限交给了用户。
思考
定期删除和惰性删除其实是在频繁使用cpu定时检查还是让cpu不那么频繁使用之间的一种平衡,如果经常需要定期删除,那么删除操作占用 的cpu资源就会比较高,导致这部分cpu资源无法提供给客户使用;而惰性删除则是将cpu的使用权交给了用户,但这也导致redis中可能会驻留大量过期了的key。这种设计思路其实考虑了内存和cpu性能之间的平衡。
存在的问题
在实际生产中,上述两种方式是结合使用的,但结合使用也可能导致有部分过期key仍旧驻留在内存中,这部分的key在定期删除的时候没有 被随机选中,同时在惰性删除的时候也没有被用户访问,因此可能产生爆内存的情况发生。
文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。