场景再现:凌晨3点,你写的Redis脚本突然报错——"invalid timestamp format",看着监控里飙升的延迟曲线,你才意识到时间格式这个"小问题"竟成了线上事故的导火索 💥
别担心!这篇指南将用最直白的语言,带你掌握Redis中时间处理的正确姿势,文末还附赠「避坑清单」哦~
Redis处理时间主要涉及三种形式:
Unix时间戳(最常用)
1627833600
(秒级)或 1627833600000
(毫秒级) SET order:expire 1627833600
ISO 8601字符串(人类友好)
"2025-07-20T00:00:00Z"
HSET event:1001 start_time "2025-07-20T00:00:00Z"
混合格式(特殊场景)
"20250720"
(压缩日期)、"00:00:00"
(纯时间) -- Lua脚本示例(使用Unix时间戳) local orderKey = KEYS[1] local currentTime = tonumber(redis.call('TIME')[1]) -- 获取Redis当前秒级时间 local expireTime = currentTime + 1800 -- 30分钟=1800秒 redis.call('EXPIREAT', orderKey, expireTime) return "OK"
关键点:
TIME
命令返回数组格式 [秒, 微秒]
redis.replicate_commands()
确保时间一致性 -- 使用ISO格式日期作为Hash字段 local today = os.date("!%Y-%m-%d") -- UTC日期 local userId = ARGV[1] redis.call('HSET', "daily_active:" .. today, userId, "1") return "DONE"
os.date("!%Y-%m-%d")
中的表示UTC) redis-cli --latency
检测时钟漂移) -- 比较两个ISO时间字符串 local function compare_iso_time(iso1, iso2) return tonumber(string.sub(iso1, 1, 19):gsub("[-T:]", "")) > tonumber(string.sub(iso2, 1, 19):gsub("[-T:]", "")) end
PIPELINE
减少时间获取的往返开销 _sec
/_ms
后缀) CONFIG SET timezone
(会导致时间混乱) 下次当你再遇到Redis时间问题时,不妨回来看看这篇指南~ 如果觉得有用,不妨点个赞 👍 让更多人避开这些"时间陷阱"!
基于Redis 7.2+版本验证,2025年7月更新)
本文由 崔雅娴 于2025-07-30发表在【云服务器提供商】,文中图片由(崔雅娴)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/488846.html
发表评论