记:Redis数据淘汰策略

本文探讨了Redis中处理键值过期的四种主要策略:定时删除、惰性删除、定期删除和主动清理。每种策略都有其独特的优缺点,如定时删除对内存友好但消耗CPU资源,而惰性删除则相反。定期删除策略则是两者之间的折衷,通过限制删除操作的时间和频率来平衡内存使用和CPU负担。主动清理策略则在内存达到预设阈值时触发,依据特定策略清理过期键。

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

在这里插入图片描述

一:定时删除

策略 : 设置键的过期时间的,对键的删除操作。

优点 : 对内存友好,释放过期键所占用的内存。

缺点 : 对CPU时间不友好,占用太多CPU时间,影响服务器的响应时间和吞吐量。

二:惰性删除

策略 : 只有在读写操作时,检查键是否过期,如果过期,删除该键,如果没有过期,返回该键。

优点 : 对CPU时间友好,读写操作键时才对键进行过期检查。

缺点 : 过期键占用内存,有内存泄漏风险。

三:定期删除

**策略 ?*定时删除和惰性删除的折中。

隔时间执行一次定时删除,并通过限制删除操作执行的总时长和总频率来限制删除操作对CPU占用时间的影响。

**难点:**确定删除操作执行的总时长和总频率。执行太频繁,执行时间过长,就会退化成定时删除策略,影响客户端请求效率;执行得太少,执行时间太短,会演变为惰性删除,存在内存浪费的情况。

四:主动清理

内存超过maxmemory限定时,触发主动清理。

清理时会根据用户配置的maxmemory-policy来做适当的清理。

圈起来,要考的!!

Redis 惰性删除和定期删除两种策略,配合使用,很好地在合理使用CPU时间和避免浪费内存之间取得平衡。

举例:

键中随机选取 20 个 key,
         遍历,过期 key删除,
                    过期的 key 比率超过25%,则重复步骤 1。

同时,为了保证过期扫描不会出现循环过度,导致线程卡死现象,增加了扫描时间的上限,默认不会超过 25ms以及频次上线10次。

### Redis淘汰策略详解 Redis 提供了多种内存淘汰策略,允许开发者根据具体场景选择最合适的方案。以下是详细的介绍: #### 1. noeviction `noeviction` 是一种不主动淘汰任何数据的策略。当内存达到上限时,如果尝试写入新数据,则会返回错误给客户端,而不会删除已有数据[^2]。 #### 2. volatile-lru (Least Recently Used) 该策略仅针对设置了过期时间的键生效。它会选择最近最少使用的键进行淘汰。通过这种方式可以优先保留更频繁访问的数据[^3]。 #### 3. allkeys-lru 与 `volatile-lru` 类似,但它作用于所有的键(无论是否有设置过期时间)。此策略同样遵循 LRU 原则,即移除那些长时间未被访问过的键[^3]。 #### 4. volatile-random 这种策略随机挑选设置了过期时间的键并将其删除。适用于希望减少特定集合大小但又不想依据使用模式的情况[^3]。 #### 5. allkeys-random 类似于 `volatile-random` ,不过它是从整个数据库中任意选取一个键来删除,而不考虑是否设定了有效期[^3]。 #### 6. volatile-ttl (Time To Live) 对于带有生存期限(TTL)标的对象来说, 这一方法倾向于先驱逐即将到期的数据项。换句话说就是越接近其有效截止日期的数据越有可能被淘汰掉[^3]。 #### 7. volatile-lfu (Least Frequently Used) 这是另一种形式的选择标准——基于对象在过去一段时间内的使用频率来进行判断;较不常使用的元素会被清除出去。注意这个选项可能需要额外的支持才能启用,在某些版本里默认不可用或者性能开销较大。 #### 配置方式 可以通过修改配置文件中的 maxmemory-policy 参数指定采用哪一类回收算法。例如: ```bash maxmemory-policy allkeys-lru ``` 以上就是在 Java 技术栈下关于 Redis 不同类型的缓存清理机制的一些基础知识总结[^3]。 ### 示例代码展示如何查看当前服务器所应用的最大容量以及对应的处理规则 ```python import redis r = redis.StrictRedis(host='localhost', port=6379, decode_responses=True) # 获取最大可用内存限制值 print(r.config_get('maxmemory')) # 查看现在正在实行的是哪种满载应对措施 policy = r.config_get('maxmemory-policy') print(policy['maxmemory-policy']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值