2023-01-25 16:23:09
在 Redis 中,查看 key 的过期时间可通过以下方法实现:
核心命令TTL keyName返回 key 的剩余生存时间(单位:秒)。
返回值含义:
正整数:key 的剩余存活秒数。
-1:key 未设置过期时间(永不过期)。
-2:key 不存在。
示例:TTL myKey # 查看键名为 "myKey" 的剩余秒数
PTTL keyName返回 key 的剩余生存时间(单位:毫秒),精度更高。
返回值含义与 TTL 相同,仅单位不同。
示例:PTTL myKey # 查看键名为 "myKey" 的剩余毫秒数
缓存管理
通过 TTL/PTTL 可监控缓存数据的存活时间,及时刷新或清理过期数据。
例如:设置缓存有效期为 3600 秒后,可通过 TTL cacheKey 确认剩余时间。
临时数据控制
对会话(Session)、验证码等临时数据设置过期时间,并通过命令验证是否生效。
例如:验证码有效期 300 秒,可通过 TTL verificationCodeKey 检查。
避免误操作
若返回 -1,需确认是否需手动设置过期时间(如 EXPIRE keyName seconds)。
若返回 -2,需检查 key 是否存在或拼写是否正确。
性能影响
TTL/PTTL 是 O(1) 复杂度操作,对性能影响极小,可频繁调用。
Redis 可视化工具
Redis Desktop Manager、Medis 等工具可直观显示 key 的过期时间(需连接 Redis 服务器)。
步骤:
连接 Redis 实例。
定位目标 key。
查看属性中的 TTL 字段(部分工具支持毫秒级显示)。
Redis API 集成
通过编程语言(如 Python 的 redis-py)调用 TTL/PTTL 命令。
示例代码(Python):import redisr = redis.Redis(host='localhost', port=6379)ttl = r.ttl("myKey") # 返回秒数pttl = r.pttl("myKey") # 返回毫秒数print(f"剩余秒数: {ttl}, 剩余毫秒数: {pttl}")
Q1:为什么 TTL 返回 -1 但 key 仍被删除?
可能通过其他命令(如 DEL)手动删除了 key,或 Redis 重启后持久化数据丢失。
Q2:PTTL 返回的值比 TTL 小 1000 倍吗?
是的,PTTL 是 TTL 的毫秒级版本,两者数值关系为 PTTL = TTL * 1000(仅当 key 存在且有过期时间时)。
Q3:如何批量检查多个 key 的过期时间?
Redis 无原生批量 TTL 命令,需通过脚本(如 Lua)或客户端循环调用。
Lua 脚本示例:local keys = {"key1", "key2", "key3"}local results = {}for _, key in ipairs(keys) do local ttl = redis.call("TTL", key) table.insert(results, {key, ttl})endreturn results
通过以上方法,可灵活适配不同场景下的 Redis key 过期时间查询需求。