内存回收

1.过期Key的处理 RedisDb是按功能进行分区的
b8617a1de5cb34cab5efa641b595f4edf5d38922

RedisDb 内存图
22ea146726b7343e09433397b76d722339df76e6

2.1
惰性删除: 如果想已过期就立即删除, 那么就要给每个key安装监视器, 成本巨大
因此我们使用懒删除, 访问到key时查看是否过期, 是则删除, 否则继续.
c19e224363e732aae6e3bfae83614f4cad6016e3

2.2
周期删除: 抽样删除(有些key已过期但很少人访问可能造成长期内存浪费)
fe7e2b5bec79a88e9dc740217feaa86e28436f44

2.2.1
Slow & Fast
64a5ccc5fcdfd47f22de80535091e6c0d0ed2a76

3.内存淘汰策略
f500d0d05014253e489f956de1caadcbd7992c0e

主动淘汰机制
在内存不够用时,不是随机淘汰,
而是最近访问少、访问频率低的 key 先被淘汰
为了做到这一点,它为每个 key 维护一个压缩的“访问频率统计信息”。
LRU: 最近使用最少
LFU: 使用频率最小

LFU:
2e3dbc5b508414225e4f85dcba31c04b4807535e

3.1 逻辑访问函数
2bbf7911bf8bedf774137169adda037148f49b6e

3.2 逻辑衰减
fadf2c454a1cba700c45b790fce78475103725be

d126d939ed7fea565f65d225fe83096afff34614