Redis删除有序集中的项目

时间:2013-06-28 09:46:08

标签: redis

我正在使用Redis在我的社交网络应用程序中实现类似于Instagram / facebook的'feed'系统。

我有一个键"user:id:feed",其中包含一组指向图片的有序ID。我想知道的是,当某张特定照片被删除时,如何确保所有包含该照片ID的Feed中的照片ID也被删除?

我是否必须遍历每个Feed集并将其删除?这是redis中的常见模式吗?

由于

2 个答案:

答案 0 :(得分:2)

Redis中的常见模式是交叉引用各种数据结构中的项目。您必须明确地执行它(Redis没有自动参照完整性机制)。

在这里,您可以在Feed和照片之间建立多对多的关系。如果您需要添加/删除提要和照片,您可能需要使用2种不同的数据结构来实现这种关系。

user:id:feed  ->  sorted sets of photo:n (referring to photos)
photo:n       ->  set of user:id:feed (referring to feeds)

因此,您可以有效地检索Feed中的照片以及照片中的Feed。例如删除照片:

  • 从照片中检索Feed:n
  • 管道多个ZREM操作(每个用户一个:id :: feed)

因此删除操作最终耗费两次往返。您可以使用Lua服务器端脚本减少到1次往返。

答案 1 :(得分:0)

我的两分钱:

使用MongoDB实现这样的feed结构更适合,并且它也可以在嵌套结构中处理基于id的数据操作。您可以将用户的所有相关信息保存在一行中,然后在一次调用中检索并删除它。