redis的过期策略是什么啊
-
Redis的过期策略是通过设置键的过期时间来实现的。当一个键设置了过期时间时,Redis会在这个键过期时自动将其删除。
Redis的过期策略主要有两种:定时删除和惰性删除。
-
定时删除:
定时删除是通过在Redis中维护一个过期字典,以及使用一个定时器来实现的。在设置键的过期时间时,同时将键的过期时间和键的名称添加到过期字典中。定时器会定期(默认每秒钟)检查过期字典中的键是否过期,过期的键会被删除。定时删除策略的优点是删除键的操作集中在一个固定的时间点进行,实现简单高效。缺点是如果过期键数量较多,且集中在某个时间点,可能会导致定时器负载过大,影响系统性能。
-
惰性删除:
惰性删除是在对某个键进行读写操作时,先检查该键是否过期,如果过期则删除该键。这种策略延迟了过期键的删除操作,只在需要访问该键时才会删除。惰性删除策略的优点是可以避免定时删除策略中可能出现的大量删除操作,降低系统负载。缺点是如果有大量过期键长时间未被访问,可能会占用过多的内存。
Redis的过期策略可以通过
volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random、noeviction六种策略进行配置。每种策略都对应了一种删除策略和优先级规则。总结:Redis的过期策略通过定时删除和惰性删除的组合实现,定时删除负责删除过期的键,惰性删除负责在访问过期键时删除。通过合理配置过期策略,可以根据实际需求,平衡内存占用和性能。
2年前 -
-
Redis是一种高性能的内存数据库,它采用了多种策略来处理过期键。下面是关于Redis过期策略的一些详细信息:
-
惰性过期(Lazy Expiration):
Redis使用惰性过期策略。即当Redis服务器接收到读或写请求时,它会检查键是否过期。如果键已经过期,服务器将删除该键并返回空值。 -
定期删除(Eviction):
Redis通过定时器进行定期删除过期键。服务器会以一定的时间间隔,随机选择一些过期键进行检查和删除。 -
客户端删除(Eager expiration):
当客户端发出GET请求时,Redis会首先检查待访问的键是否过期。如果键已经过期,则会在返回之前删除该键。 -
使用过期字典(Expiry Dictionaries):
Redis使用过期字典来存储需要过期的键。该过期字典是一个全局数据结构,它存储了数据库中所有键和它们的过期时间。 -
过期键的删除策略(Expired Key Deletion policies):
Redis采用了两种不同的过期键删除策略:- 定期删除策略(LRU):Redis使用Least Recently Used(最近最少使用)算法来删除过期键。它会在已经过期的键中选择最近未使用的键进行删除。
- 定期删除策略(Clock):Redis还使用了Clock算法来删除过期键。该算法在内存使用方面更加高效。
以上是Redis的过期策略,通过这些策略,Redis能够高效地管理过期键,并确保缓存的有效性。
2年前 -
-
Redis 是一种内存数据库,它采用键值对的方式存储数据。当我们往 Redis 中存入数据时,可以为每个键设置一个过期时间,当键的过期时间到达后,Redis 会自动将这个键从数据库中删除。Redis 的过期策略是基于定期删除和惰性删除两种方式。
-
定期删除(定时任务)
Redis 默认每秒钟执行 10 次淘汰策略,会从设置了过期时间的键中随机选择一部分进行检查,如果发现键已过期,则删除该键。这个策略对于大多数业务场景已经足够,因为它可以尽量保证键的过期时间在一定范围内。定期删除的缺点是可能会导致内存使用率较高,因为有些键已过期但还未被删除。 -
惰性删除(实时删除)
当客户端访问某个键时,Redis 会先检查是否过期,如果过期则删除,这种方式称为惰性删除。这样可以保证键在被访问时立即被删除,减少内存的占用。但是惰性删除可能会导致一些过期的键在很长时间内一直保留在内存中,直到被访问时才删除。
为了解决定期删除和惰性删除的缺点,Redis 使用了两种淘汰策略的结合:在定期删除的基础上,加入惰性删除。当键过期时,会根据某种策略进行判断,并选择性地删除若干个过期键。
另外,Redis 还提供了主动删除过期键的功能,即使用
TTL命令来主动检查键的过期时间,并删除过期的键。总的来说,Redis 的过期策略是通过定期删除、惰性删除和主动删除结合使用,以保证过期键及时被删除,减少内存的占用。
2年前 -