内存淘汰机制,LFU和LRU的比较和优缺点以及实现方式

发布时间 2023-09-12 17:18:11作者: xiuer211

内存淘汰机制,LFU和LRU的比较和优缺点以及实现方式

Redis 内存满了,会发生什么?

如果redis的内存达到了阈值,会发生内存淘汰,阈值通过配置文件的maxmemory设置

Redis 内存淘汰策略有哪些?

大概分为三类

  • 报错
  • 根据有过期时间淘汰
    • volatile-random,随机淘汰有过期时间的key
    • volatile-ttl,淘汰最早过期的
    • volatile-lru,淘汰最近最少使用的
    • volatile-lfu,淘汰使用频率最低的
  • 全体范围内淘汰
    • allkeys-random,随机淘汰
    • allkeys-lru,淘汰最近最少使用的
    • allkeys-lfu,淘汰使用频率最低的

LRU 算法和 LFU 算法有什么区别?

lru关注的是时间,淘汰的是最近一段时间内最少使用的

lfu关注的是频率,淘汰的是使用频率最低的

Redis 是如何实现 LRU 算法的?

redisObject保存着一个lru字段保存着最后一次访问的时间戳,不使用传统的链表,而是记录一个最后一次访问的时间,淘汰最后访问时间最早的。

优点:节省内存

缺点:会导致缓存污染问题,只访问一次的数据会将之前的热点数据淘汰掉

什么是 LFU 算法?

根据使用频率的高低进行淘汰,淘汰使用频率最低的key,可以解决lru的缺点

Redis 是如何实现 LFU 算法的?

复用了reidsObject的lru字段,将lru字段分为两部分,一部分记录最后访问的时间戳,另外一部分记录热度,热度会随着时间逐步降低,访问次数越多,热度也会越高,但不是线性增长,热度越高热度越难增加