如何理解Redis中的惰性释放?
redis String优势有预分配和惰性释放,惰性释放如何理解?
1 个回答
二八佳人体似酥,腰间仗剑斩凡夫。小菜鸟在Redis在从键空间中删除一个key可以采取一种惰性释放的策略,应用这种策略的原因在于对于某些数据对象的释放需要消耗过多的系统资源,如果在Redis的主线程中采用同步的方式去删除以及释放这样的key-value数据,那么会导致系统长时间的阻塞在释放数据操作上,而无法处理其他的业务逻辑。对于这种情况,我们以惰性释放的策略,使用一个后台线程,通过异步的方式来对数据对象进行释放,无疑是一种较为合适的选择。 这个策略的开关被定义在redisServer 这个全局状态结构体之中: ``` struct redisServer{ ... /* Lazy free */ int lazyfree_lazy_eviction; int lazyfree_lazy_expire; int lazyfree_lazy_server_del; ...}; ``` 以上的三个策略开关的含义为: 1.redisServer.lazyfree_lazy_eviction ,是否在淘汰某个key时,使用惰性释放策略。 2.redisServer.lazyfree_lazy_expire ,是否在过期某个key时,使用惰性释放策略。 3.redisServer.lazyfree_lazy_server_del ,服务器端删除某个key时,是否使用惰性释放策略。 默认情况下,Redis服务器会启用惰性释放的策略,如果希望关闭这个策略,那么可以修改Redis的配置文件中的配置项,将这个策略关闭。 在src/lazyfree.c源文件中定义了关于Redis中惰性释放策略的相关逻辑,在这个源文件中代码的实现主要分为两个部分: 1.对于数据的异步释放,这里会将待释放的数据加入到Redis中一个后台任务队列之中,由一个专门的线程,按照FIFO的策略,依次将待释放的数据进行释放。 2.为释放线程提供释放数据所用到的函数接口。发布于 2022-11-10 21:22 •IP属地 辽宁举报评论收藏1
公众号进入网站体验更佳

