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


124

当前是否只能使整个键/值对失效?如果我想向列表类型结构中添加值并在插入后1小时自动删除它们该怎么办。目前是否可行,还是需要运行cron作业才能手动进行清除?

Answers:


76

当前是否只能使整个键/值对失效?

据我所知,并且还根据有关过期的密钥命令和文档,当前您只能将过期设置为特定密钥,而不是其基础数据结构。但是,在Google网上论坛上有关于此功能的讨论,并列出了替代解决方案。


1
截至2016年7月,您是否有任何想法在较新版本中对此提供支持?
Kamran Shahid

1
@KamranShahid对此有什么看法?
Prakash Kumar

1
Nop Prakash还没有。
卡姆兰·沙希德

3
这个答案在8年后仍然有用吗?
simo

2
是的,Redis不支持嵌套数据结构中的元素过期。
Itamar Haber

94

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

使用排序的集,并使用时间戳记作为得分。然后按分数范围删除项目很简单,这可以定期执行,也可以只在每次写入时完成,而读取操作总是通过仅读取分数范围来忽略超出范围的元素。

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


7
不错的解决方案,但我希望redis正确地支持这一点。这是一个常见的要求,不需要复杂的解决方法。
UpTheCreek

14
我不知道,我真的很高兴他们坚持使用枪支-以他们不想要或不计划的方式扩展功能集意味着做出设计牺牲。在顶部构建附加功能听起来像是完美的解决方案,而Redis可以出色地完成其工作
Kieren Johnstone

Redis的是完美的,因为它是-简单,简洁的设计和可预测的行为,其结果比优秀的性能与更
let4be

1
很棒的解决方案,我们还可以使用一个简单的fifo列表,其中保留了一个列表并仅采用了前5个元素,并且当列表根据可伸缩性变得大于5 + N时,我们将删除密钥并重新开始。简单,轻松,以及Redis算法的确切方式。该算法使我们的报告系统有足够的时间查询列表并查看用户使用哪些设备登录。同意@KierenJohnstone,Redis旨在围绕它创建体系结构,并且它的外观非常完美。
Ligemer '17

1

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

哈希和排序集通过guid链接。

  1. 我的哈希值设置为在“ x”秒内过期
  2. 我有一个用于远程查询的排序集
  3. 两者的数据都添加到事务中,因此如果一个失败,则它们都会失败。
  4. 在范围查询中,使用“ EXISTS”查看哈希值是否存在,因为迭代结果
  5. 如果它不存在,则它已经过期,因此请从排序集中删除该项目
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.