上一篇
想象你开了一家网红咖啡店☕,给新用户发放24小时有效的"买一送一"电子优惠券,如果这些优惠券过期后还躺在系统里:
这就是Redis过期机制要解决的核心问题——让数据到点自动消失!
Redis内部使用"过期字典"(expires字典)记录每个键的死亡倒计时,关键点在于:
EXPIREAT coupon:user001 1735660800 # 设置为2025-08-31 00:00:00过期
EXPIRE coupon:user001 86400 # 24小时后过期
Redis实际存储的是毫秒级精度的UNIX时间戳(即使你用EXPIRE设置秒数),
EXPIRE key 60
expires[key] = 1735660860000
(当前时间戳+60000毫秒) 命令 | 示例 | 适用场景 |
---|---|---|
EXPIRE |
EXPIRE coupon:101 3600 |
需要秒级精度时(1小时后过期) |
PEXPIRE |
PEXPIRE session:xyz 5000 |
需要毫秒级控制(5秒后过期) |
EXPIREAT |
EXPIREAT event:888 1735689600 |
固定时间点失效(如活动结束) |
PEXPIREAT |
PEXPIREAT temp:data 1735661234567 |
毫秒级绝对时间控制 |
SET+EXPIRE 二合一 |
SET ticket:VIP "A12" EX 60 |
创建键时直接设置过期(原子操作) |
小技巧💡:用TTL key
查看剩余生存时间,返回-2表示键已消失,-1表示永不过期
Redis采用双保险机制确保及时清理:
为什么双策略?
# 错误示范 - 可能导致Redis瞬间卡顿 for i in {1..100000}; do SET "coupon:$i" "value" EXPIRE "coupon:$i" 3600 done # 正确做法 - 添加随机偏移量 EXPIRE "coupon:101" $((3600 + RANDOM % 600)) # 分散在1小时~1小时10分钟之间
如果手动DEL
一个键,Redis不会触发过期事件的监听(即使这个键本来有过期时间)
DEL
命令到AOF文件 # 查看过期key数量趋势 redis-cli info stats | grep expired_keys # 采样观察即将过期的key redis-cli --scan --pattern "*" | while read key; do ttl=$(redis-cli ttl "$key") if [ $ttl -gt 0 ] && [ $ttl -lt 300 ]; then echo "即将过期($ttl秒): $key" fi done
Redis的过期机制就像给数据装上定时自毁装置💣:
下次设置优惠券有效期时,不妨想想咖啡店的例子——让数据像新鲜烘焙的咖啡豆一样,在最佳风味期存在,过期后果断清理!☕🗑️
本文由 松采南 于2025-08-02发表在【云服务器提供商】,文中图片由(松采南)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/513373.html
发表评论