redis key 过期是怎么处理的
-
Redis中的key过期是通过以下两种方式处理的:惰性删除和定期删除。
-
惰性删除:当客户端尝试读取一个已经过期的key时,Redis会判断该key是否过期。如果过期,则将该key进行删除操作,并返回null或空值给客户端。这种方式是在读取的时候检查key是否过期,因此可以确保每次读取都是最新的数据。
-
定期删除:Redis使用一种叫做过期扫描的机制来定期删除过期的key。Redis会使用一个定时器(默认每秒执行10次)来随机选择一些设置了过期时间的key,然后检查这些key是否过期,如果过期则删除。
为了保证删除过期key的效率,Redis使用了一种叫做惰性删除+定期删除的策略。即在每次读取key的时候,进行惰性删除,并定期运行过期扫描来删除过期的key。这种策略既保证了读取时的实时性,又保证了删除过期key的效率。
值得注意的是,在使用过期时间的key上执行删除操作并不会立即删除,而是会通过惰性删除和定期删除两种方式进行处理。因此,在某些情况下,已经标记为过期的key仍然可能存在一段时间。
1年前 -
-
Redis中的Key过期是通过使用TTL(Time To Live)来处理的。TTL是一个由Redis设置的整数值,通过设置它,可以为Key设置一个指定的过期时间。一旦Key的TTL时间到期,Key将会被自动删除,这样可以有效地控制内存的使用以及移除不再使用的数据。
以下是Redis Key过期的处理方式:
-
设置过期时间:在向Redis存储数据时,可以通过使用EXPIRE命令为Key设置一个指定的过期时间,单位为秒。例如,可以使用命令
EXPIRE mykey 60为Key "mykey"设置一个60秒的过期时间。 -
自动删除:一旦Key的TTL时间到期,Redis会自动删除该Key,以释放内存空间。
-
惰性删除:当客户端尝试访问一个已经过期的Key时,Redis会立即删除它,并返回空值,这种处理方式称为惰性删除。
-
定期删除:为了加速过期Key的删除,Redis会定期地以一定的频率删除一批已经过期的Key。这个频率由
maxmemory-samples配置参数决定,默认值为10。 -
内存淘汰策略:如果内存不足,Redis会使用一定的策略来删除过期Key以释放内存。常见的策略有:LRU(Least Recently Used,最近最少使用)、LFU(Least Frequently Used,最不经常使用)等。
总结:
Redis通过使用TTL来管理Key的过期时间,一旦Key过期,它将被自动删除以释放内存。Redis采用惰性删除和定期删除两种方式来处理过期Key,同时,还可以通过内存淘汰策略来释放内存空间。通过这些机制,Redis可以高效地管理过期Key,保证数据的有效性和内存的合理使用。1年前 -
-
Redis中的键过期是通过设置键的过期时间来实现的。当键的过期时间到达时,Redis会自动删除该键。
Redis中键的过期时间可以通过以下两个命令进行设置:
EXPIRE key seconds:设置键的过期时间为指定的秒数。PEXPIRE key milliseconds:设置键的过期时间为指定的毫秒数。
如果要取消键的过期时间,可以使用以下两个命令:
PERSIST key:移除键的过期时间,使其永不过期。PTTL key:获取键的剩余过期时间。
可以通过以下命令查看键的剩余过期时间:
TTL key:获取键的剩余过期时间(以秒为单位)。
当Redis检测到某个键过期时,会在访问该键时立即删除它。这种策略被称为“内存懒惰删除”,因为Redis不会主动地运行过期键删除作业,而是在访问键时检查其是否过期,并在需要时立即删除。
Redis还通过使用定期删除(RDB)和惰性删除(AOF)两种策略来处理过期键:
- 定期删除(RDB):简单地说,Redis每隔一段时间会对数据库中的键进行检查,如果发现键已过期,则会将其删除。这个时间间隔可以通过配置文件中的
save指令进行调整。 - 惰性删除(AOF):在执行写操作期间,Redis会同时将对键的操作记录到AOF文件中。当某个键过期时,Redis只需要在AOF文件中写入一条特殊的删除操作命令,以保持数据库的一致性。
总结来说,Redis中的键过期是通过设置键的过期时间,并在访问键时立即删除过期键来实现的。同时,Redis还使用定期删除和惰性删除两种策略来处理过期键。
1年前