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

ran*_*its 108 caching redis

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

小智 79

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

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

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

  • 我不知道,我很高兴他们坚持自己的枪支 - 以他们不想要的方式扩展功能集或者不计划进行设计牺牲.在顶级声音上构建额外的功能就像完美的解决方案一样,让Redis做得非常出色 (10认同)
  • 很好的解决方案,但我希望redis能够正确地支持它.这是一个常见的要求,不需要复杂的解决方法. (7认同)
  • 关于此方法的一个很好的教程:https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/(还讨论了基于时间的分片集合的另一种方法)。 (2认同)

yoj*_*o87 67

目前只能使整个键/值对到期吗?

据我所知,并且还根据有关到期的关键命令和文档,目前您只能将到期设置为特定键而不是其基础数据结构.然而,谷歌小组讨论了这个功能与概述的替代解决方案.

  • 8年后这个答案仍然有意义吗? (4认同)
  • 是的,Redis 不支持嵌套数据结构中的元素过期。 (3认同)

JEP*_*ice 5

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

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

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