码哥,当 key 达到过期时间,Redis 就会马上删除么?
先说结论, 并不会立马删除 ,Redis 有两种删除过期数据的策略:
- 定期选取部分数据删除;
- 惰性删除;
该命令在 Redis 2.4 版本,过期时间并不是很精确,它可能在零到一秒之间。
从 Redis 2.6 开始,过期错误为 0 到 1 毫秒。
EXPIRE key seconds [ NX | XX | GT | LT] 指令可以将指定的 key 设置过期时间,如果没有设置过期时间, key 将一直存在,除非我们明确将其删除,比如执行 DEL 指令。
所谓”狡兔死,走狗烹“,没用了就干掉,跟 35 岁就“毕业”是一个道理。
好慌……
从 Redis 版本 7.0.0 开始: EXPIRE 添加了选项: NX 、 XX 和 GT 、 LT 选项。
- NX:当 key 没有过期时才设置过期时间;
- XX:只有 key 已过期的时候才设置过期时间;
- GT:仅当 新的到期时间 大于当前到期时间时才设置过期时间;
- LT:仅在新到期时间小于当前到期时间才设置到过期时间。
过期与持久化
主从或者集群架构中,两台机器的时钟严重不同步,会有什么问题么?
key 过期信息是用 Unix 绝对时间戳 表示的。
为了让过期操作正常运行,机器之间的时间必须保证稳定同步,否则就会出现过期时间不准的情况。
比
Redis 过期策略:惰性删除与定期删除

Redis 的过期数据不会立即删除,采用惰性删除和定期删除策略。惰性删除在访问 key 时检查是否过期并删除,定期删除则每秒随机检查部分 key 并删除过期的。Redis 7.0.0 添加了新的过期时间设置选项。若过期数据过多且无法通过删除策略解决,会触发内存淘汰机制。
最低0.47元/天 解锁文章
2290

被折叠的 条评论
为什么被折叠?



