redis如何判断过期时间
-
Redis中判断过期时间的方式非常简单,它使用了一种叫做"定期删除+惰性删除"的策略来处理过期键。
Redis中每个键值对都可以设置一个过期时间,通过使用
EXPIRE或者PEXPIRE命令来设置。Redis会在每个键的过期时间到达时自动将其删除。具体的过期时间判断过程如下:
-
定期删除:Redis会每隔一段时间执行一个定期删除操作来检查并删除过期键。这个时间间隔由
hz配置项决定,默认为10秒。在每个周期内,Redis会随机选择一些将要过期的键并检查它们是否过期。如果键已经过期,那么就会被删除。 -
惰性删除:当你尝试获取一个键的值时,Redis会检查它是否过期。如果过期,那么键会被删除。这种方式被称为惰性删除,因为Redis只在使用键时才会检查其过期时间。
通过以上两种方式,Redis可以判断键是否过期并将其删除。这种设计方式既避免了每次访问键时都要检查过期时间的开销,又可以保证键的过期时间得到及时的处理。同时,它也可以确保Redis的性能不受过期键的影响,从而保证系统的稳定运行。
1年前 -
-
在Redis中,有两种方式来判断键的过期时间。
-
定期删除:Redis使用定期删除策略检查过期键。定期删除是通过在每个设置了过期时间的键上,设置一个定时器来实现的。Redis默认每隔一段时间会随机选择一些设置了过期时间的键进行检查,如果发现键已过期,则将其删除。
-
惰性删除:Redis还使用惰性删除策略。惰性删除是指在访问某个键的时候,Redis会先判断该键是否过期,如果过期则进行删除操作。
更具体地说,Redis使用了以下几种策略来判断键的过期时间:
-
当设置键的过期时间时,Redis会在内部创建一个定时器,用来监视该键是否过期。当键过期时,定时器会立即将该键标记为过期状态。
-
Redis内部维护了一个过期字典,用来保存所有设置了过期时间的键。过期字典是一个哈希表,字典的键为设置了过期时间的键,值为该键的过期时间。
-
Redis默认每隔100毫秒检查一批设置了过期时间的键,检查过程如下:
a. 基于算法
Redis-server通过ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP定义的周期性检查循环次数。b. 检查循环中会随机选择一些过期字典中的键。
c. 对于每个选择的键,
Redis-server会通过查看键的过期时间来判断是否过期。如果过期,则删除该键。 -
在每一次执行命令时,在执行命令之前,Redis会检查是否有过期的键需要删除。如果有,Redis会在执行命令之前立即删除这些键。
总结起来,Redis可以通过定期删除和惰性删除两种策略来判断键的过期时间。定期删除是指Redis会定期检查过期键并删除,而惰性删除是指在访问某个键的时候才会判断该键是否过期,并进行删除操作。这两种策略结合起来,保证了Redis的键的过期时间的准确性。
1年前 -
-
Redis中可以使用TTL(Time To Live)来判断键的过期时间。TTL是一个键的存活时间,表示键在多长时间之后会自动被删除。
在Redis中,可以使用TTL命令来获取键的剩余存活时间。通过TTL命令,可以判断键是否存在以及剩余的存活时间。具体的操作流程如下:
-
使用TTL命令获取键的剩余存活时间。命令格式为:TTL key。其中,key表示要判断的键名。例如,TTL mykey。
-
根据TTL命令的返回值判断键的状态。TTL命令的返回值有以下几种情况:
- 返回-1:表示键不存在。即该键已经被删除了。
- 返回-2:表示键存在,但没有设置过期时间。即该键永久有效。
- 返回正整数:表示键存在,并且剩余的存活时间为返回的数值。即该键还有一定的存活时间。
下面是一个示例:
127.0.0.1:6379> SET mykey "Hello" #设置键的值 OK 127.0.0.1:6379> EXPIRE mykey 60 #设置键的过期时间为60秒 (integer) 1 127.0.0.1:6379> TTL mykey #获取键的剩余存活时间 (integer) 59 #表示键还有59秒的存活时间通过上述操作,可以判断键是否存在以及键的剩余存活时间。
另外,还可以使用PTTL命令来获取键的剩余存活时间,不同的是,TTL返回的是秒数,而PTTL返回的是毫秒数。
需要注意的是,当键被删除或过期后,对该键执行TTL命令将返回-2,而不是-1。这是由于删除或过期的键在Redis中是以特殊的方式标记的,所以TTL命令会返回-2作为标记。
1年前 -