Redis技术查漏补缺(一)-淘汰策略

Redis 提供了多种数据淘汰策略,包括 volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random 和 no-eviction,用于处理内存不足时的数据处理。在 Redis 4.0 后,新增了 volatile-lfu 和 allkeys-lfu 策略,采用LFU算法淘汰使用频率较低的数据。LRU和LFU算法分别基于最近最少使用和最少使用频率来决定淘汰哪些数据。选择策略应考虑数据访问模式,如热点数据、均匀分布或周期性数据。Redis 的这些策略为缓存管理提供了灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Redis数据淘汰策略

在4.0之前,Redis提供了6种策略

volatile-lru

根据LRU算法选择设置了超时属性(expire)的数据,选择距离当前时间最长时间未访问的数据进行删除,如果没有可删除的键对象,回退到no-enviction策略,无法写入新的数据。

volatile-ttl

根据设置了超时属性(expire)的键,删除最近将要过期数据。如果没有可删除的键对象,回退到no-enviction策略,无法写入新的数据。

volatile-random
根据设置了超时属性(expire)的键,任意选择数据淘汰。如果没有可删除的键对象,回退到no-enviction策略,无法写入新的数据。

allkeys-lru
从所有数据中选择距离当前时间最长时间未访问的数据进行删除。

allkeys-random
从所有数据中任意选择数据淘汰。

no-enviction

默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息。此时只响应读操作。

在4.0开始添加了2个策略

volatile-lfu

根据LFU算法选择设置了超时属性(expire)的数据选择使用频率最少的数据进行删除,如果没有可删除的键对象,回退到no-enviction策略,无法写入新的数据。

allkeys-lfu

从所有数据中选择使用频率最少的数据进行删除。

2.淘汰算法

在版本变更中Redis主要出现了2种缓存淘汰算法即2.8开始使用LRU(最近最少使用算法)和4.0才开始使用的LFU(最少使用频率算法)。

2.1 LRU

LRU算法是基于文件历史访问记录,从缓存中剔除离当前时间最近一次访问最早的数据,其本质认为最近会被访问的数据,未来短时间也会进行访问。而在Redis中并没有使用完全的LRU算法,在2.8中使用的是近似LRU,根据maxmemory-samples选取符合的数据,再从里面执行LRU算法,在3.0中对算法进行优化,新算法会维护一个数据经过排序的淘汰池,后面只会进入比淘汰池频率最高的数据低的数据进入淘汰池,当淘汰池满的时候就淘汰池中访问频率最低的数据,插入新待淘汰数据。

2.2 LFU

LFU基于文件的访问频率,从缓存中删去过去一段时间访问次数最少的数据。

3.策略选用场景

当访问数据拥有明显的热门和冷门数据趋势的时候我们可选择allkeys-lru策略。

当访问数据没有明显趋势,类似均匀分布访问的时候,我们可以allkeys-random策略。

当我们知道哪些数据常用,哪些数据不常用的时候,我们可以手动设定不同的TTL,让Redis使用volatile-ttl策略来进行数据淘汰。

当访问数据拥有明显的周期性,如年月日周的时候,我们可以选择allkeys-lfu策略。

官方文档:redis-doc/lru-cache.md at master · redis/redis-doc · GitHub

论文:《基于视频块下次请求时间的缓存系统研究》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值