内存淘汰机制,LFU和LRU的比较和优缺点以及实现方式
内存淘汰机制,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字段分为两部分,一部分记录最后访问的时间戳,另外一部分记录热度,热度会随着时间逐步降低,访问次数越多,热度也会越高,但不是线性增长,热度越高热度越难增加
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)