Redis 内存驱逐策略

1 缓存替代算法

cache algorithms (also frequently called cache replacement algorithms or cache replacement policies).
When the cache is full, the algorithm must choose which items to discard to make room for the new ones.
当缓存已满时, 缓存替代算法必须要选择要丢弃的数据项, 以便为新的数据项腾出空间.
wiki 上有很多 缓存替代算法 的实现, 参考这里.

2 Redis 内存驱逐策略(Eviction policies)

以下内容翻译自 Redis 官网的 Eviction policies 介绍.

驱逐策略定义了 在数据库超出内存限制时, Redis 所采用的处理方法.

驱逐策略有:

PolicyDescription
noeviction Returns an error if the memory limit has been reached when trying to insert more data(内存使用超过限制时, 插入新的数据返回会报错)
allkeys-lruEvicts the Least Recently Used keys out of all keys(对所有 key 进行驱逐, 删除 最近最少使用 的key)
allkeys-lfuEvicts the Least Frequently Used keys out of all keys(对所有 key 进行驱逐, 删除 最不常使用 的key)
allkeys-randomRandomly evicts keys out of all keys(对所有 key 进行驱逐, 随机删除key)
volatile-lruEvicts the Least Recently Used keys out of all keys with an “expire” field set(对设置了过期时间的 key 进行驱逐, 删除 最近最少使用 的key)
volatile-lfuEvicts the Least Frequently Used keys out of all keys with an “expire” field set(对设置了过期时间的 key 进行驱逐, 删除 最不常使用 的key)
volatile-randomRandomly evicts keys with an “expire” field set(对设置了过期时间的 key 进行驱逐, 随机删除key)
volatile-ttlEvicts the shortest time-to-live keys out of all keys with an “expire” field set.(对设置了过期时间的 key 进行驱逐, 删除存活时间最短的key, 越早过期的key越优先被删除)

其中, volatile-lru 是默认的驱逐策略.

### Redis缓存淘汰策略解释 #### 一、概述 Redis作为一种高效的键值对数据库,在内存资源有限的情况下,采用特定的缓存淘汰策略来维持系统的稳定性和性能。当Redis实例所占用的内存量达到了预设的最大阈值`maxmemory`时,会依据设定好的淘汰政策自动清除一部分数据以释放空间[^1]。 #### 二、主要淘汰策略介绍 - **noeviction**: 当达到最大内存限制时不执行任何驱逐操作;如果尝试写入新数据而无法满足条件,则返回错误给客户端。 - **allkeys-lru**: 使用最少最近使用(Least Recently Used, LRU)原则从整个键集中移除最久未被访问过的项直到有足够的可用空间为止。 - **volatile-lru**: 只针对设置了过期时间(TTL) 的键实施LRU算法,优先考虑那些即将到期但仍占用了较多空间的对象。 - **allkeys-random**: 不区分对象的新旧程度随机挑选并删除某些条目。 - **volatile-random**: 类似于前者但仅作用于具有TTL属性的记录上。 - **volatile-ttl**: 倾向于先清理掉剩余存活周期较短即快要过期的数据元素[^2]. #### 三、配置参数说明 为了更好地控制上述行为,可以通过调整几个重要的配置选项: - `maxmemory`: 定义允许使用的最高物理RAM容量; - `maxmemory-policy`: 设置具体的淘汰方法,默认为`noeviction`; - `maxmemory-samples`: 影响到近似实现真实LRU效果的程度——更大的样本数意味着更精确但也可能带来额外开销[^3]. ```bash # 示例:设置Redis最大内存为100MB,并启用基于LRU的全局范围内的键值对回收机制 CONFIG SET maxmemory 100mb CONFIG SET maxmemory-policy allkeys-lru ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值