Redis:二级索引到期

时间:2018-08-31 17:12:14

标签: redis

我对最佳实践感到好奇,因为Redis中的二级索引即将过期。

例如,假设我的对象ID的位置在过期之前仅被视为有效5秒钟。我有:

objectID -> hash of object info

我将这些条目设置为5秒后自动失效。

我还想通过邮政编码查找对象,所以我还有另一个映射:

zipCode -> set or list of objectID

我知道无法自动使集合中的元素过期,但是我想在过期时自动从该邮政编码映射中删除objectID。

此操作的标准做法是什么?如果在到期时触发了一个事件,我可以找到关联的邮政编码映射并删除objectID,但不确定是否存在(我将使用Go)。

1 个答案:

答案 0 :(得分:1)

  

如果发生过期事件,我可以找到相关的邮政编码映射并删除objectID,但不确定是否存在

是的,有一个过期通知,请查看this作为示例。

您可以让客户订阅expiration event,然后从 zipCode 集或列表中删除项目。

但是,此解决方案有两个问题:

  1. 该通知不可靠。如果客户端与Redis断开连接,或者只是崩溃,客户端将丢失一些通知。为了使其更可靠,可以让多个客户端侦听该通知。如果一个客户端崩溃,其他客户端仍然可以从 zipCode 中删除项目。
  2. 这不是原子的。在密钥到期和从 zipCode 中删除项目之间存在一个时间窗口。

如果您对这两个问题都满意,可以尝试此解决方案。