如何获取Redis中缓存值的最后更新时间?
获取Redis缓存键的最后更新时间
Redis本身没有内置存储键最后更新时间的机制,但可以通过以下几种方案实现需求:
1. 自定义存储元数据(最直接方案)
把缓存值和最后更新时间绑定存储,常用两种方式:
方式A:使用Hash结构存储
将值和更新时间作为Hash的两个字段,每次更新缓存时同步更新时间戳:
- 设置/更新缓存:
# 存储值和当前Unix时间戳 HSET user:123 value "user_profile_data" updated_at 1700000000 - 获取最后更新时间:
HGET user:123 updated_at
方式B:存储包含时间戳的JSON字符串
把值和时间戳打包成JSON格式的字符串存储,读取后解析即可:
- 设置/更新缓存:
SET user:123 '{"value":"user_profile_data", "updated_at":1700000000}' - 获取后解析JSON中的
updated_at字段即可得到更新时间。
2. 使用键空间通知追踪更新事件
通过Redis的键空间通知功能,监听键的修改事件,维护一个专门存储更新时间的哈希表:
- 先开启键空间通知:
# 运行时临时开启(重启Redis后失效),也可在redis.conf中配置notify-keyspace-events KEA永久生效 CONFIG SET notify-keyspace-events KEA - 客户端监听键的修改事件(比如
SET操作),当目标键被更新时,记录当前时间到key_update_times哈希表:# 监听到键user:123的SET事件时执行 HSET key_update_times user:123 1700000000 - 获取指定键的最后更新时间:
HGET key_update_times user:123
注意事项
- 不要混淆
OBJECT IDLETIME命令:该命令返回的是键的空闲时间(最后一次被访问的时间间隔),并非最后更新时间,不适合你的需求。
内容的提问来源于stack exchange,提问作者Thirumal
相关产品推荐
相关产品推荐

