Redis过期Key的清理机制

简介: Redis过期Key的清理机制

Redis是一款快速的内存数据库,被广泛应用于缓存、会话存储和实时数据处理等场景。为了避免内存占用过多,Redis引入了过期Key的概念。过期Key是在设置Key时指定一个过期时间,在时间到达后,Redis会自动将这些过期的Key删除。本文将详细介绍Redis过期Key的清理机制。


1. 过期Key的设置


在Redis中,可以使用EXPIRE、EXPIREAT或PSETEX等命令来设置Key的过期时间。例如:

EXPIRE key seconds:设置Key的过期时间为指定的秒数seconds。

EXPIREAT key timestamp:设置Key的过期时间为指定的Unix时间戳timestamp。

PSETEX key milliseconds value:设置Key的过期时间为指定的毫秒数milliseconds。

通过以上命令设置的Key在一定时间后会自动过期,并被清理掉。


2. 过期Key的清理


Redis内部并不是实时监测每个Key的过期时间,而是通过一种惰性清理机制来处理过期Key。在Redis的服务器进程中,有一个专门的定时任务称为“定时器”,该定时器会周期性地检查Key是否过期,然后将过期的Key删除。


3. 定时器的工作方式


Redis的定时器工作方式如下:

定时器并不是精确到每个Key的过期时间的,而是采用了一种渐进式的方式。

当定时器启动时,它会检查一部分Key的过期时间,将那些已经过期的Key删除掉。

定时器每次运行只处理一小部分Key,然后再次等待一段时间,再处理下一批Key。

这样的机制保证了定时器的工作效率,避免了一次性处理所有Key可能造成的性能问题。


4. 过期Key的删除


过期Key的删除是通过Redis的内部事件循环实现的。当定时器检测到有Key过期时,它会将过期Key添加到一个待删除的列表中。而实际的删除操作则在Redis的事件循环中进行。


5. 内存淘汰策略


当Redis的内存空间快要用尽时,为了避免内存溢出,Redis会根据配置的内存淘汰策略来主动清理一些Key。常见的内存淘汰策略有:

noeviction:禁止淘汰,当内存不足时,写入操作会报错。

allkeys-lru:Least Recently Used(最近最少使用)算法,淘汰最近最少使用的Key。

allkeys-random:随机淘汰Key。

volatile-lru:针对设置了过期时间的Key采用LRU算法进行淘汰。

volatile-random:针对设置了过期时间的Key随机进行淘汰。



总结


通过引入过期Key和定时器的机制,Redis能够自动清理过期的Key,避免内存占用过多的问题。同时,合理配置内存淘汰策略也能够确保Redis在内存紧张时有合理的处理方案。Redis的过期Key清理机制保证了数据库的高性能和稳定运行,是Redis作为一个高效缓存和数据存储的重要特性之一。


目录
相关文章
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
803 61
Redis应用—6.热key探测设计与实践
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
373 2
|
NoSQL 测试技术 Redis
Redis批量删除Key的三种方式
Redis批量删除Key是优化数据库性能的重要操作,本文介绍三种高效方法:1) 使用通配符匹配(KEYS/SCAN+DEL),适合不同数据规模;2) Lua脚本实现原子化删除,适用于需要事务保障的场景;3) 管道批量处理提升效率。根据实际需求选择合适方案,注意操作不可逆,建议先备份数据,避免内存溢出或阻塞。
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
301 7
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
1421 5
Redis中大Key与热Key的解决方案
|
存储 监控 NoSQL
Redis大Key问题如何排查?如何解决?
Redis大Key问题如何排查?如何解决?
875 0
Redis大Key问题如何排查?如何解决?
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
217 1