内存淘汰机制,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字段分为两部分,一部分记录最后访问的时间戳,另外一部分记录热度,热度会随着时间逐步降低,访问次数越多,热度也会越高,但不是线性增长,热度越高热度越难增加
标签:volatile,优缺点,LFU,lru,内存,LRU,淘汰 From: https://www.cnblogs.com/xiuer211/p/17697266.html