繁体   English   中英

Redis作为缓存-重置到期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM