Redis过期键删除策略有哪些设置方法?具体操作是怎样的?
内存耗尽后Redis会发生什么
1、内存回收机制Redis通过为键值对设置过期时间实现自动内存回收,避免无效数据长期占用内存。设置过期时间的命令 expire key ttl:设置键的过期时间为ttl秒。pexpire key ttl:设置键的过期时间为ttl毫秒。expireat key timestamp:设置键在指定timestamp秒数后过期。

2、理解 Redis 内存耗尽的两种典型表现拒绝服务模式(默认配置)当内存达到上限时,Redis 会拒绝所有写入或修改操作(如 SET、HSET、LPUSH 等),但读取(GET)和删除(DEL)操作仍可执行。此模式可避免数据损坏,但会导致业务写入功能瘫痪,需立即处理。
3、缺点:内存耗尽后写入操作会失败,可能引发业务异常。volatile-lru 说明:从已设置过期时间的键中淘汰最久未使用(LRU)的键。优点:优先释放过期键,减少内存压力,适用于缓存场景。缺点:可能误删仍被使用的过期键,导致缓存命中率下降。
Redis删除策略和逐出策略
删除策略Redis针对过期键的删除策略主要有三种,分别基于时间、空间和平衡性设计:定时删除通过定时器在键过期时立即删除,优点是内存利用率高,缺点是单线程环境下CPU压力骤增,可能影响响应速度。例如,设置setex key 10 value后,10秒到期时Redis需立即释放内存,但频繁触发会干扰正常命令执行。

性能优化策略惰性删除:标记过期键,实际删除发生在访问时,减少CPU占用。逐出策略:内存不足时,按配置策略(如LRU、LFU)淘汰数据。管道(Pipeline):客户端批量发送命令,减少网络往返时间(RTT)。Lua脚本:支持原子性执行复杂逻辑,避免多次网络请求。
一般都用 Everysecond模式。由于 Redis 的删除过期键策略中有一条是主动删除:会随机抽出100个设置了过期的key,对已过期的进行删除,如果发现过期的key超过25个,就会重复这个过程。因此,如果有大量同一时间过期的key,会在主动删除触发时,不停地取key删key,造成阻塞。
这样,每个key就能获得正确的LFU值,用户可以通过OBJECT FREQ子命令获取访问频率信息,但需要先将内存逐出策略设置为allkeys-lfu或volatile-lfu。redis 0.3还提供了redis-cli的热点key发现功能,通过执行带--hotkeys选项的命令即可轻松获取热点key。

衰减因子:server.lfu_decay_time确保了counter不会无限增长,从而能够持续区分热点key。 更新机制:每次对key进行读写访问时,都会更新其LFU值。 获取LFU信息:用户可通过OBJECT FREQ命令获取key的LFU信息,但前提需设置内存逐出策略。 热点key发现功能:rediscli的hotkeys选项提供了直观的热点key发现功能。
OOM 问题可能导致 Redis 无法进行写入操作,只能读取数据。当 maxmemory-policy 配置为非默认值 noeviction 时,Redis 将因内存不足而逐出或过期大量键,从而影响查询效率。排查 OOM 问题的思路可以从以下几个方面入手:数据量是否过大?** 使用 redis-benchmark 持续灌入数据,检查内存使用情况。
Redis过期键删除策略和内存淘汰策略
1、惰性删除实现:通过 expireIfNeeded 函数在访问 key 前检查并删除过期 key。- 定期删除实现: - Redis 默认每秒进行 10 次过期检测(可通过 `redis.conf` 修改 `hz` 配置)。 - 每次随机抽取 20 个 key 检查,如果过期 key 数量超过 5 个(25%),继续抽取,否则停止。
2、当我们查询一个键时,Redis便首先检查该键是否存在过期字典中,如果存在,那就获取其过期时间。然后将过期时间和当前系统时间进行比对,比系统时间大,那就没有过期;反之判定该键过期。那对于过期数据,一般有三种方式进行处理:Redis的过期删除策略: 惰性删除 和 定期删除 两种策略配合使用。
3、删除策略Redis针对过期键的删除策略主要有三种,分别基于时间、空间和平衡性设计:定时删除通过定时器在键过期时立即删除,优点是内存利用率高,缺点是单线程环境下CPU压力骤增,可能影响响应速度。例如,设置setex key 10 value后,10秒到期时Redis需立即释放内存,但频繁触发会干扰正常命令执行。
上一篇:Redis缓存究竟有何独特之处,它与传统缓存有何不同?
栏 目:Redis
下一篇:如何确保Redis主从数据一致性?解决主从复制不一致问题的方法是什么?
本文标题:Redis过期键删除策略有哪些设置方法?具体操作是怎样的?
本文地址:https://fushidao.cc/shujuku/58320.html
您可能感兴趣的文章
- 02-26如何彻底关闭redis服务并阻止其自启动,确保安全稳定运行?
- 02-26如何精确查询并分析Redis缓存数据与存储大小?
- 02-26如何准确判断并获取Redis集群中各节点详细信息?
- 02-26如何高效准确地读取并获取Redis数据,有哪些实用技巧?
- 02-26Redis中保存对象是否必须可序列化?保存不同类型对象有何特殊要求?
- 02-26Redis缓存空值及缓存满值如何有效处理与优化?
- 02-26如何确保Redis与数据库数据完全一致性的最佳实践和技巧?
- 02-26如何在服务器上安装并配置Redis?详细步骤与操作命令揭秘!
- 02-25Redis缓存与数据库一致性如何确保?揭秘实现数据同步的奥秘!
- 02-25如何有效提升Redis命中率?揭秘提高Redis缓存未命中问题的策略与技巧
阅读排行
- 1如何彻底关闭redis服务并阻止其自启动,确保安全稳定运行?
- 2如何精确查询并分析Redis缓存数据与存储大小?
- 3如何准确判断并获取Redis集群中各节点详细信息?
- 4如何高效准确地读取并获取Redis数据,有哪些实用技巧?
- 5Redis中保存对象是否必须可序列化?保存不同类型对象有何特殊要求?
- 6Redis缓存空值及缓存满值如何有效处理与优化?
- 7如何确保Redis与数据库数据完全一致性的最佳实践和技巧?
- 8如何在服务器上安装并配置Redis?详细步骤与操作命令揭秘!
- 9Redis缓存与数据库一致性如何确保?揭秘实现数据同步的奥秘!
- 10如何有效提升Redis命中率?揭秘提高Redis缓存未命中问题的策略与技巧
推荐教程
- 09-22详解如何在Windows上配置和使用Redis持久化功能
- 09-22Redis过期时间的设计与实现代码
- 12-31深入了解Redis的看门狗机制
- 09-22Spring Boot 3.0x的Redis 分布式锁的概念和原理
- 02-01Redis入门指南,如何高效使用Redis提升应用性能?
- 09-22redis搭建哨兵模式实现一主两从三哨兵
- 09-22Redis increment 函数处理并发序列号案例
- 09-22深入理解redis删除策略和淘汰策略
- 09-22Redis的Bitmap(位图)详解和命令演示
- 09-22Redis压缩列表的设计与实现
