【发布时间】:2014-01-13 12:19:06
【问题描述】:
我正在使用 redis 作为缓存,并希望使 redis 中未积极使用的数据过期。目前,为对象设置过期时间会在过期时间过后删除对象。但是,如果在对象过期之前至少读取一次,我想将对象保留在 redis 中。
我看到的一种方法是为每个对象存储一个单独的 expiry_key,并将到期设置为 expiry_key 而不是原始对象。在 expiry_key 上订阅 del 通知,当收到 del 通知时,检查是否在过期间隔期间至少读取了一次对象(通过单独维护的访问日志)。如果没有读取对象,则对原始对象执行 del 命令。如果已读取,则重新创建具有到期间隔的 expiry_key。
此实现需要额外的系统来管理过期,并且更愿意使用 redis 在本地执行此操作。
有没有更好的解决方案来解决这个问题?
为每次读取重置对象的到期时间会增加对 redis 的写入次数,因此这不是一个选择。
请注意,redis 缓存刷新是通过更改通知系统异步管理的。
【问题讨论】: