Redis:可能使数组或排序集中的元素到期吗?

时间:2011-09-28 03:18:04

标签: caching redis

目前是否只能使整个键/值对过期?如果我想将值添加到List类型结构并在插入后1小时自动删除,该怎么办?目前是否可行,或者是否需要运行cron作业来手动进行清除?

4 个答案:

答案 0 :(得分:69)

有一种常见的模式可以很好地解决这个问题。

使用有序集,并使用时间戳作为分数。然后,按分数范围删除项目是微不足道的,这可以定期完成,或者只在每次写入时删除,读取总是忽略超出范围的元素,只读取一系列分数。

更多信息:https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

答案 1 :(得分:62)

  

目前是否只能使整个键/值对过期?

据我所知,并且还根据key命令和关于expiration的文档,目前您只能将到期时间设置为特定密钥而不是其基础数据结构。不过,Google群组中有discussion有关此功能的概述,并提供了概述的替代解决方案。

答案 2 :(得分:3)

我想到了另一种处理方法,不知道它是否对您有帮助,但是这里有:

散列和排序集通过guid链接。

  1. 我有一个哈希设置为在'x'秒内过期
  2. 我有一个用于远程查询的排序集
  3. 两者的数据都添加到事务中,因此如果一个失败,它们都会失败。
  4. 在远程查询中,使用'EXISTS'查看在迭代结果时是否存在哈希值
  5. 如果该商品不存在,则该商品已过期,因此请从排序集中删除该商品

答案 3 :(得分:0)

如何创建两个单独的排序集?

主排序集key = value

过期排序集合key = expire_timestamp。 如果您只想让单个分数过期,您可以设置为 key:unique_id = expire_timestamp

通过 zrangebyscore 的怜悯,我们可以获得过期的密钥。然后我们需要做的就是定期检查和zrem。 如果您只想让一个分数过期:​zincrby -1