同时指定EX和KEEPTTL选项时Redis SET命令的执行逻辑是什么?
Redis SET命令同时指定EX和KEEPTTL的执行规则
你推测的三种情况中,第3种是正确的:忽略KEEPTTL选项,无论键是否已存在,均按EX设置过期时间。
执行逻辑说明
KEEPTTL参数的生效前提是你没有指定任何其他过期类选项(包括EX、PX、EXAT、PXAT等),当你同时传入显式过期配置和KEEPTTL时,Redis会优先处理显式过期参数,直接忽略KEEPTTL配置。
实际操作验证
你可以通过以下命令测试验证:
- 键存在的场景
# 先写入带过期时间的测试键 127.0.0.1:6379> SET test_key val1 EX 100 OK 127.0.0.1:6379> TTL test_key (integer) 95 # 同时传入EX 20和KEEPTTL覆盖写入 127.0.0.1:6379> SET test_key val2 EX 20 KEEPTTL OK # 查看TTL,已更新为EX指定的20秒左右,KEEPTTL未生效 127.0.0.1:6379> TTL test_key (integer) 17
- 键不存在的场景
# 对不存在的键同时传入EX 30和KEEPTTL写入 127.0.0.1:6379> SET new_key val3 EX 30 KEEPTTL OK # 查看TTL,已按EX指定设置30秒过期,KEEPTTL未生效 127.0.0.1:6379> TTL new_key (integer) 28
内容的提问来源于stack exchange,提问作者ajbeaven
相关产品推荐
相关产品推荐

