redis是怎么过期的
-
Redis 中键值对的过期策略有两种,分别是:定时过期和惰性过期。
首先是定时过期。当设置键的过期时间时,Redis会为每个键设置一个过期时间(ttl)值,并创建一个定时器。定时器会在键的过期时间到达时立即执行,将键删除。
其次是惰性过期。当访问一个键时,Redis会先检查该键是否过期。如果过期,则删除该键并返回空值。这种机制保证了在键过期后,仍然可以访问到最新的键值对。但它也带来了一定的性能开销,因为需要在访问时检查键的过期状态。
为了避免过多的定时器产生,Redis采用了一种优化策略,即通过惰性过期来进行删除。在每次访问键时,Redis会检查键是否过期,并进行删除。这种方式可以避免大量的定时器产生,减少了系统开销。
需要注意的是,惰性过期并不是精确的,它是以一定的概率进行删除的。因为 Redis 将键的过期时间分割成若干个小的时间片段,每次访问键时只检查当前时间片段是否过期,如果过期则进行删除。这种策略可以减少每次访问时的开销,提高性能。
总结来说,Redis 的键值对过期策略有定时过期和惰性过期两种方式。定时过期通过设置定时器,在到达过期时间时删除键。而惰性过期是在每次访问键时检查是否过期,并进行删除。为了减少定时器产生,Redis采用了惰性过期进行删除,并以时间片段的方式进行优化。
1年前 -
Redis 的数据过期机制是基于键值对的 TTL(time to live)设置来实现的。当一个键设置了 TTL 后,Redis 会自动在指定的时间过期后将其删除。
以下是 Redis 数据过期的几个关键点:
-
键的 TTL 设置:在使用 Redis 保存数据时,可以通过
EXPIRE命令或SET命令的EX参数设置键值对的 TTL。例如,可以使用以下命令设置一个键值对在 60 秒后过期:SET key value EX 60 -
过期时间的计算:Redis 使用一个简单的定时任务来检查键是否过期。在设置 TTL 的同时,Redis 会维护一个堆排序的过期时间队列,以便能够快速找到即将过期的键。当一个键到达过期时间时,Redis 会在后台进行异步删除。
-
续期操作:如果在键的过期时间即将到达时,对该键进行了读或写操作,Redis 会自动将其过期时间续期。这意味着,只要键一直被访问,它将不会被自动删除,除非手动删除或重新设置其 TTL。
-
延迟删除:为了防止在一个高并发的环境中删除大量过期键对 Redis 主线程的影响,Redis 引入了延迟删除的机制。具体来说,当过期键被检测到时,Redis 并不立即删除它们,而是将它们添加到一个专门的延迟队列中。在后续的清理周期中,Redis 会在后台进行批量删除操作。
-
内存回收:由于 Redis 是内存数据库,过期键的删除对于释放内存非常重要。但是,即使过期键被删除了,底层的物理内存并不会立即释放,而是在后续写操作时进行内存回收。Redis 使用的是惰性删除机制,也就是说,它只在有需要时才会将内存回收给操作系统。
通过合理地使用 TTL 设置,可以在 Redis 中实现数据的自动过期,从而节省内存空间,并提高性能。但需要注意的是,过多地使用过期时间可能会增加 Redis 的内存压力,因为 Redis 在检查键的过期状态时需要更多的 CPU 资源。因此,在应用程序中需要根据具体场景合理设置键的 TTL。
1年前 -
-
Redis 是一个开源的内存数据存储系统,可以用作数据库、缓存和消息中间件。在 Redis 中,过期的键值对会被自动删除,以便释放内存空间并维护数据的实效性。Redis 使用两种方式来判断键值对是否过期:惰性删除和定期删除。
一、惰性删除(Lazy deletion)
惰性删除是指在客户端尝试访问某个键值对时,Redis 会先检查该键值对是否已经过期,如果已经过期,则会删除该键值对并返回空结果给客户端。这种方式在访问键值对时判断是否过期,没有频繁地扫描所有键值对,能够节省计算资源。惰性删除的缺点是如果某个键过期后很长时间没有被访问,它仍然会占用内存。因此,Redis 同时使用定期删除来解决这个问题。
二、定期删除(Expiration scanning)
定期删除是指 Redis 在每隔一段时间内,会随机抽取一部分键值对进行检查,删除其中过期的键值对。这样可以避免惰性删除的缺点,及时清理过期的键值对并释放内存空间。定期删除并不是在每个键上设置删除时间,而是通过扫描随机的一部分键值对来判断其是否过期。默认情况下,Redis 每秒钟会随机检查一定数量的键值对,默认检查的键值对数量由
hz配置参数决定。三、过期策略的配置
在 Redis 中,可以通过设置过期时间(expire),或者设置过期的时间单位(expireat)来设置键值对的过期时间。过期时间可以精确到秒(seconds)或是毫秒(milliseconds),灵活地满足不同需求。Redis 还可以通过
config set命令来配置过期策略。config set命令有两个与过期策略相关的参数:maxmemory-policy:设置 Redis 的内存淘汰策略,控制内存在达到极限时会采用什么策略来释放内存空间。常用的策略有noeviction、allkeys-lru、volatile-lru等。hz:设置定期删除操作的执行频率,即每秒钟检查的键值对数量。
通过合理的过期策略配置,可以提高 Redis 的性能和资源利用率,并确保数据的实效性。
1年前