具体代码放在了下面的gitee仓库中:
https://gitee.com/DaHuYuXiXi/mock-redis-client
通过expire命令可以给Redis的key设置TTL:
可以发现,当key的TTL过期后,再次访问name返回的是nil,说明这个key已经不存在了,从而起到了内存回收的目的。
这里有两个问题大家可以思考一下:
Redis本身是一个典型的key-value内存存储数据库,因此所有的key,value都保存在之前学习过的Dict结构中。
不过在其database结构体中,有两个Dict: 一个用来记录key-value,另一个记录key-TTL.
惰性删除: 并不是在TTL到期后就立刻删除,而是在访问一个Key的时候,检查该key的存活时间,如果已经过期了才会执行删除。
内存淘汰: 就是当Redis内存使用达到设置的阈值时,Redis主动挑选部分Key删除以释放更多内存的流程。
Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰。
Redis在任何命令执行之前都会去做内存检查
对于LFU而言,虽然统计的逻辑访问次数并不准确,但是
有个问题: eviction_pool是会对传入的key进行升序排列的,然后每次删除key的时候,从池中取出最后一个key进行删除,那么不同的淘汰策略,eviction_pool按照什么规则进行排序呢?
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://cjdhy.blog.csdn.net/article/details/125035295
内容来源于网络,如有侵权,请联系作者删除!