LRU 模式
在 LRU 模式下,lru 字段存储的是 Redis 时钟 server.lruclock,Redis 时钟是一个 24bit 的整数,默认是 Unix 时间戳对 2^24 取模的结果,大约 97 天清零一次 。当某个 key 被访问一次,它的对象头的 lru 字段值就会被更新为 server.lruclock 。
LFU 模式
在 LFU 模式下,lru 字段 24 个 bit 用来存储两个值,分别是 ldt(last decrement time) 和 logc(logistic counter) 。
logc 是 8 个 bit,用来存储访问频次,因为 8 个 bit 能表示的最大整数值为 255,存储频次肯定远远不够,所以这 8 个 bit 存储的是频次的对数值,并且这个值还会随时间衰减 。如果它的值比较小,那么就很容易被回收 。为了确保新创建的对象不被回收,新对象的这 8 个 bit 会初始化为一个大于零的值,默认是 LFU_INIT_VAL=5 。
ldt 是 16 个位,用来存储上一次 logc 的更新时间,因为只有 16 位,所以精度不可能很高 。它取的是分钟时间戳对 2^16 进行取模,大约每隔 45 天就会折返 。
同 LRU 模式一样,我们也可以使用这个逻辑计算出对象的空闲时间,只不过精度是分钟级别的 。图中的 server.unixtime 是当前 redis 记录的系统时间戳,和 server.lruclock 一样,它也是每毫秒更新一次 。
推荐阅读
- 梦见一些妖魔鬼怪的梦是什么征兆 梦到妖魔鬼怪是什么意思?
- 梦见青色的虫子是什么 梦到很多青虫预示着什么
- 从报文交互看Telnet协议的安全系数
- 蜂蜜柠檬美人茶的做法,柠檬橙子茶的做法
- 福建茉莉花茶,茉莉花茶的选购观其形
- 百万级MySQL的数据量,该如何快速的完成数据迁移?
- 古六大茶山概况,古六大茶山之莽枝茶山的地理渊源
- 求N以内所有质数的算法及优化
- 凤凰水仙茶的采摘技巧,凤凰水仙的等级分类
- 枸杞泡水如何喝,红枣枸杞泡茶喝的功效
