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

目前是否只能使整个键/值对过期?如果我想向 List 类型结构添加值,并在插入后1小时自动删除它们,该怎么办。目前是否可以做到这一点,还是需要运行 cron 作业来手动执行清除?

65381 次浏览

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

据我所知,而且根据 钥匙命令和关于 过期的文档,目前您只能将过期设置为特定的键,而不能设置为它的底层数据结构。然而,有一个 讨论对谷歌组关于这个功能与概述的替代解决方案。

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

使用已排序的集合,并使用时间戳作为得分。然后,通过分数范围删除项是很简单的,这可以周期性地进行,或者只在每次写入时进行,通过只读取分数范围,读取总是忽略超出分数范围的元素。

详情请浏览: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs

我想到了一个不同的处理方法,不知道对你们有没有帮助,但是:

散列和排序集由 guid 链接。

  1. 我有一个散列设置为在‘ x’秒内过期
  2. 我有一个用于远程查询的排序集
  3. 两者的数据都添加到一个事务中,因此如果其中一个失败,它们都会失败。
  4. 对于范围较大的查询,使用“ EXISTS”查看在迭代结果时是否存在散列值
  5. 如果不存在,则已过期,因此从排序集中删除该项

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

主排序集是 key = value

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

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