redis 如何实现 [每次访问 key 后自动延长 key 的过期时间]

2021-09-18 09:16:16 +08:00
 Aliberter

大佬们 redis 自身有这个实现吗?还是说要自己实现?我用 springboot-redis 的 redisTemplate 的。谢谢!

2970 次点击
所在节点    程序员
6 条回复
Saxton
2021-09-18 09:19:22 +08:00
给这个 key 重新 set 一下时间不就重置了
Aliberter
2021-09-18 09:21:49 +08:00
@Saxton 嗯..对..只是怕自己不了解,万一自身就有这种实现,问一下
Cloud9527
2021-09-18 09:26:07 +08:00
这种问题直接看官方文档最快,不过 1 楼的方法是对的
rationa1cuzz
2021-09-18 09:38:29 +08:00
加时间貌似每次要先读 ttl 时间,再重新 set,多了一步操作,如果延长过期时间没有限制,1 楼感觉就挺好的。
PiersSoCool
2021-09-18 10:15:10 +08:00
写个 Lua 脚本最好,原子操作
Pipecraft
2021-09-18 10:27:17 +08:00
redis 6.2.0 版本新加的 GETEX 就是这个功能,[每次访问 key 后自动延长 key 的过期时间]。
具体看官方文档。redis.io/commands/getex

如果是老版本,不需要用 SET 命令重置时间,用 EXPIRE, EXPIREAT, PEXPIRE 或 PEXPIREAT 会更好些。

如果你的过期时间比较长,访问同一个 key 的频率很高(作为缓存,这个可能性很高),那么每次 GET 一次然后又 EXPIRE 一次,这样调用两次命令有点浪费。可以考虑异步更新过期时间。比如把要更新的 key 先存到内存里,定时更新一次。这样多次 GET,一定时间内只更新一次就可以了。当然这个方法会增加复杂性。性能和复杂性权衡一下,选择用简单的 GET + EXPIRE 方式还是异步方式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX