redis 集群会影响到过期时间吗

2025-04-30 07:59:04
推荐回答(1个)
回答1:

在实际的开发过程中会遇见一些有时间限制的数据,比如限时优惠活动、待支付订单或验证码等。Redis可以通过命令设置一个键的过期时间,到时间后Redis会自动将其删除。
一、过期时间设置
expire key seconds --seconds表示键的过期时间,单位为秒
pexpire key milliseconds --单位毫秒
example:
127.0.0.1:6379> set key1 value1 ex 60
OK
127.0.0.1:6379> set key2 value2 px 60
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> expire key3 60
(integer) 1
127.0.0.1:6379> expire key4 60
(integer) 0
注:expire命令返回值为1表示设置成功,返回值为0表时间设置失败或者键不存在。
二、查询键剩余时间
ttl key
example:
127.0.0.1:6379> ttl key1
(integer) -2
127.0.0.1:6379> ttl key2
(integer) -2
127.0.0.1:6379> ttl key3
(integer) 11
127.0.0.1:6379> ttl key4
(integer) -2
127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> ttl key4
(integer) -1
注:返回-1表示键未设置过期时间,-2表示键不存在
三、取消键的过期时间
persist key
example:
127.0.0.1:6379> expire key4 111
(integer) 1
127.0.0.1:6379> rename key4 key5
OK
127.0.0.1:6379> ttl key4
(integer) -2
127.0.0.1:6379> ttl key5
(integer) 78
127.0.0.1:6379> set key6 value6 ex 120
OK
127.0.0.1:6379> ttl key6
(integer) 115
127.0.0.1:6379> persist key6
(integer) 1
127.0.0.1:6379> ttl key6
(integer) -1
127.0.0.1:6379> set key7 value7 ex 1200
OK
127.0.0.1:6379> set key7 value77
OK
127.0.0.1:6379> ttl key7
(integer) -1
注:set或getset命令为键重新赋值也会同时清除键的过期时间,rename会将时间设置copy给新键
四、Redis过期机制实现方式
1、保存一个起始时间,并附上有效时间
2、每一个key内维护一个类似定时器的东西...(这个做起来,维护成本就太大了...,与高性能的旗号违背)
Redis中key的过期信息,就是通过保存一个过期时间和起始时间信息来维护的.
注:更改系统时间可能会导致键失效
五、Redis键过期删除机制
当一个键过期时,Redis会一同删除对应的aof文件。如果键分布在主从集群的节点时,主节点的键删除时也会对应删除slaves上的键。slaves不会主动删除已经过期的键,而是一直等待master的删除命令,只有当slave转变为master之后才会主动删除过期的键。Redis过期键的删除过程如下(每秒会执行10次):
1、随机抽取100个设定了有效期的key,检查其有效期,如果已经过期,则将其删除
2、如果抽取到的100个key中超过25个已经过期,那么返回步骤1