“Redis key过期了,为什么内存没释放?”
大家好,我是Mic,一个工作了14年的Java程序员
一个工作4年的程序员去某互联网公司面试,被问到了这个问题。
如果大家不知道这个问题该怎么回答,可以扫描文章尾端二维码领取我整理的50W字的大厂面试指南。
问题分析
在Redis中,Key的过期清理是通过使用定期删除和惰性删除这两种机制来实现的。
-
定期删除是指Redis会每隔一段时间执行一次定期删除操作。在每次执行定期删除时,Redis会随机抽取一部分Key,并检查它们是否过期。如果发现有过期的Key,删除key并释放相应的内存空间。这种机制保证了Redis能够定期清理过期的Key,但并不保证所有过期的Key都会被立即清理。
-
惰性删除是指当一个Key被访问时,Redis会检测Key是否过期。过期则删除并释放相应的内存空间。
了解了Redis中的key过期策略,就可以知道这个问题该怎么回答了,下面看一下这个问题的回答。
问题解答
当Redis中的Key过期时,虽然这个Key在逻辑上已经过期了,但是Redis并不会立即释放对应的内存空间
由于Redis采用了定期删除和惰性删除的方式来清理key,这两种机制意味着Redis的key过期清理并不是实时的。
所以即使Key过期了,Redis不会立即清理它们,只有在执行定期删除或访问时才会进行清理操作。
因此,一些过期的Key可能会在一段时间内仍然存在于Redis中,直到触发了相应的清理机制才会被删除和释放内存。
总结
大家知道怎么回答了吗?
如果你喜欢我的作品,记得点赞收藏加关注哦!!!
另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前总计超过50W字!