redis - Redis如何让键过期?

标签 redis

Redis是如何实现key过期的?来自 here我了解到 Redis 会存储 key 的过期时间,但具体是如何实现的?

最佳答案

简而言之 - 对于每个 Redis 对象,都有一个过期时间。除非您将对象设置为过期,否则该时间为“永不”。

现在,过期机制本身是半惰性的。惰性过期意味着在对象被读取之前您实际上并没有使它们过期。当读取一个对象时,我们检查它的过期时间戳,如果它是过去的,我们什么都不返回,并在我们到达它时删除该对象。但问题是,如果一个键从未被触及,它就会无缘无故地占用内存。

所以Redis增加了第二层随机主动过期。它只是一直读取随 secret 钥,当触及过期 key 时,它会根据惰性机制删除。这不会影响过期行为,它只是添加了过期 key 的“垃圾收集”。

当然实际的实现比这复杂,但这是主要思想。

您可以在这里阅读更多相关信息:http://redis.io/commands/expire

事件到期周期的源代码可以在这里找到:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98

关于redis - Redis如何让键过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36172745/

相关文章:

redis - 如何用redis统计用户点击率?

Scala Redis 驱动程序 - 使用 blpop 命令

c# - 使用 ServiceStack.Redis 对高容量场景的意外回复

mongodb - 如何使用mongodb提高feed系统的性能

node.js redis smembers 同步

redis - 什么在 CLIENT LIST 中生成 redis cmd=info?

python - 如何高效的向 Redis 插入 Billion 数据?

mysql - 我应该如何将redis帐户信息移动到mysql?

ruby - 使用 Redis/Ohm 按日期时间排序

node.js - Redis 中的复杂数据结构