内存策略
# 内存策略
# 过期策略
expire设置过期TTL
在Redis数据库结构体中,有两个字典Dict结构保存键值对,一个用来记录key-value,另一个用来记录key-TTL。
惰性删除:当一个key的TTL到期后,并不是立刻删除,而是在访问key时检查它的存活时间,过期才执行删除。问题:如果不去访问那么就永远不会删除
周期删除:通过定时任务,周期性的抽样部分过期key进行删除。
# 淘汰策略
内存达到设置的阈值,Redis主动挑选部分key删除以释放更多内存。Redis会在任何命令执行之前进行内存检查。
淘汰策略:allkeys—针对所有字典中的所有keys。volatile—针对所有设置了过期时间TTL的key
lru:每个key上次被访问的时间距离现在越久,被淘汰的优先级越高。
lfu:每个key被访问的频率越少,被淘汰的优先级越高。计数器随着访问次数增加,加一的概率逐渐降低。
根据淘汰策略,池子按照升序排列,值越大的淘汰的优先级越高。(now-LRU,255-LFU,maxTTL-TTL)
# 解决Redis内存饱和
1.使用内存淘汰策略,常见的淘汰算法有FIFO,LRU,LFU(数据引用次数最小的淘汰,是一种全局的算法,不关注短期是否被使用)
2.惰性过期:过期的数据被再次访问时,才判断是否过期并进行删除。缺点在于极端情况下过期数据会占据大量内存,而不被删除释放。
定期过期:每隔一段时间,CPU扫描内存删除过期数据。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57