作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
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/
我是一名优秀的程序员,十分优秀!