在 Redis 7.0+ 中,EXPIREAT
命令的功能得到了增强,使其更灵活和实用。以下是其增强选项的详解:
EXPIREAT
基本功能
EXPIREAT
用于设置一个键的过期时间戳(以秒为单位)。例如:
EXPIREAT key timestamp
这会将指定键的过期时间设置为给定的时间戳。
如果想设置毫秒级的时间戳,请使用
PEXPIREAT
。
增强选项详解
-
EXPIREAT
的 NX 和 XX 选项-
NX:只有当键不存在时才设置过期时间。
EXPIREAT key timestamp NX
-
XX:只有当键已经存在时才设置过期时间。
EXPIREAT key timestamp XX
-
-
EXPIREAT
的 GT 和 LT 选项-
GT (Greater Than):仅在当前键的过期时间大于提供的新时间戳时更新过期时间。
EXPIREAT key timestamp GT
-
LT (Less Than):仅在当前键的过期时间小于提供的新时间戳时更新过期时间。
EXPIREAT key timestamp LT
-
-
组合使用选项
- 可以组合使用这些选项来实现更复杂的逻辑。例如,可以同时使用
GT
和NX
来确保只有在键不存在且新时间戳比现有过期时间大时才设置过期时间。
- 可以组合使用这些选项来实现更复杂的逻辑。例如,可以同时使用
-
返回值
- 返回值表示操作是否成功:
1
表示成功设置了过期时间。0
表示未设置过期时间(可能是由于条件不满足或键不存在)。
- 返回值表示操作是否成功:
-
与
PEXPIREAT
的区别PEXPIREAT
与EXPIREAT
类似,但使用毫秒级时间戳。Redis 7.0+ 同样支持对PEXPIREAT
使用相同的增强选项。
应用场景
- 动态过期策略:通过
GT
和LT
选项,可以实现基于时间戳的动态过期策略,避免不必要的过期时间更新。 - 锁机制:在分布式系统中,结合
NX
和XX
可以实现更精细的锁管理。 - 缓存控制:根据不同的业务需求,灵活地控制缓存的过期行为。
示例
# 设置键 mykey 的过期时间为 2025-07-05 00:00:00
EXPIREAT mykey 1751558400
# 仅当键 mykey 已经存在时,才设置新的过期时间
EXPIREAT mykey 1751558400 XX
# 仅当键 mykey 不存在时,才设置新的过期时间
EXPIREAT mykey 1751558400 NX
# 仅当当前过期时间晚于 2025-07-05 00:00:00 时,才更新过期时间为更早的时间
EXPIREAT mykey 1751558400 LT
结合SET命令
在 Redis 7.0+ 中,EXPIREAT
的增强功能可以与 [SET]指令组合使用,从而在一个命令中完成 设置值 和 设置过期时间(基于时间戳) 的操作。
Redis 7.0+ 中 [SET]命令的新特性
Redis 7.0 引入了更丰富的 [SET]命令选项,支持将 EX
, PX
, EXAT
, PXAT
, KEEPTTL
等参数组合使用。其中:
EX seconds
:设置键的过期时间(秒)PX milliseconds
:设置键的过期时间(毫秒)EXAT timestamp-seconds
:等价于EXPIREAT
,设置秒级时间戳PXAT timestamp-milliseconds
:等价于PEXPIREAT
,设置毫秒级时间戳NX
/XX
:是否仅在键存在或不存在时设置KEEPTTL
:保留原有过期时间(不能与 EX/EXAT/PX/PXAT 共用)
示例:结合 EXAT
(即 EXPIREAT)使用 SET
# 设置 key1 的值为 "hello",并在 2025-07-05 00:00:00 过期(秒级时间戳)
SET key1 "hello" EXAT 1751558400
# 仅当 key1 不存在时才设置,并设置过期时间为 2025-07-05 00:00:00
SET key1 "hello" EXAT 1751558400 NX
# 如果 key1 已存在,则更新其值和新的过期时间
SET key1 "world" EXAT 1751644800 XX
对比传统方式
旧方式(分开执行):
SET key1 "hello"
EXPIREAT key1 1751558400
新方式(一步到位):
SET key1 "hello" EXAT 1751558400
优势:
- 原子性更强,避免并发问题。
- 更简洁、语义清晰。
注意事项
EXAT
接收的是 秒级时间戳,如需毫秒请使用PXAT
。EXAT
/PXAT
与EX
/PX
类似,但指定的是 绝对时间点 而非相对时间。- 不可同时使用
EX
/EXAT
/PX
/PXAT
多个时间参数。 - 可以配合
NX
/XX
使用,实现条件设置 + 绝对过期时间。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论