1.概述
摘自: 《Redis深度历险 核心原理与应用实践》_钱文品.pdf
仅供自己学习,方便查找,建议看原文。没法设置转载,侵权可删,仅供自己学习。
【redis】redis 过期策略、LRU 算法淘汰、懒惰删除
前面讲了 Redis懒惰删除的特性,它是使用异步线程对已删除的节点进行内 存回收。但讲得还不够深入,所以本节要对异步线程逻辑处理的细节进行分析, 看看 Antirez 是如何实现异步线程处理的。
异步线程在 Redis 内部有一个特别的名称,就是“BIO”,全称是 Background IO,意思是在背后默默干活的 IO 线程
。不过内存回收本身并不是什么 IO 操作,只 是 CPU 的计算消耗可能会比较大而已。
2.懒惰删除的最初实现不是异步线程
Antirez 实现懒惰删除时,他并不是一开始就想到异步线程。他最初的尝试是在主线程里,使用类似于字典渐进式搬迁
的方式来实现渐进式删除回收。
比如对于一 个非常大的字典来说,懒惰删除是采用类似于 scan 操作的方法,通过遍历第一维数 组来逐步删除回收第二维链表的内容,等到所有链表都回收完了,再一次性回收第 一维数组 。这样也可以达到删除大对象时不阻塞主线程的效果。
但是说起来容易做起来却很难。渐进式回收需要仔细控制回收频