[英]Redis as cache - reset expiry
我将Redis用作缓存,并希望使Redis中未被积极使用的数据过期。 当前,为对象设置到期时间会在到期时间过后删除该对象。 但是,如果在对象过期之前至少读取一次该对象,我想将其保留在redis中。
我看到的一种方法是为每个对象存储一个单独的expiry_key,并将expiry设置为expiry_key而不是原始对象。 在expiry_key上订阅del通知,并在收到del通知时,检查是否在到期间隔内(通过单独维护的访问日志)至少一次读取了对象。 如果未读取对象,请在原始对象上执行del命令。 如果已读取,请使用到期间隔重新创建expiry_key。
此实现需要其他系统来管理到期时间,并且希望使用Redis在本地进行处理。
有更好的解决方案来解决这个问题吗?
为每次读取重置对象的到期时间将增加对redis的写入次数,因此这不是一种选择。
请注意,redis缓存刷新是通过更改通知系统异步管理的。
您可以在每次读取后再次设置过期密钥(在密钥上设置TTL为O(1) )。
您的系统在事务中执行此操作可能很有意义:
MULTI
GET mykey
EXPIRE mykey 10
EXEC
您还可以通过管道传递命令。
官方文档中也描述了这种模式。
请参阅http://redis.io/topics/config中的 “将Redis配置为缓存”部分
我们可以将maxmemory-policy设置为allkeys-lru,以清除redis中的非活动内容。 这将适用于我所述的用例。
另一种方法是在key上定义一个通知,然后重置它的到期时间
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.