Redis多个请求

时间:2013-06-24 12:35:13

标签: ruby redis

我正在编写一个使用Redis的非常简单的社交网络应用程序。

每个用户都有一个排序集,其中包含其Feed中的ID项。如果我想显示其Feed,请执行以下步骤:

  1. 使用ZREVRANGE获取Feed中的商品ID
  2. 使用HMGET获取Feed(每个Feed项都是一个字符串)
  3. 但是现在,我还想知道用户是否喜欢过饲料项目。所以我有一个与每个Feed项相关联的集合,其中包含喜欢Feed项的用户ID。

    如果我收到了15个Feed项,那么现在我必须向Redis执行额外的15个请求,以查找当前用户是否已对其进行评论的每个Feed项(通过检查每个Feed中每个集中是否存在id )。

    因此需要15 + 1个请求。

    此类查询是否被认为是正常的'什么时候使用Redis?有没有更好的方法来构建数据以避免这么多请求?

    我正在使用redis-rb gem。

2 个答案:

答案 0 :(得分:0)

您可以轻松地重构代码,通过使用管道(redis-rb支持)将15个请求合并为一个。

您可以使用第一个请求从排序集中获取ID,然后根据这些结果使用它们获取所需的许多键(使用管道)

使用这种方法,您应该总共有2个请求而不是16个,并且保持代码非常简单。

作为替代方案,您可以使用lua脚本并在一个请求中获取所有内容。

答案 1 :(得分:0)

这种数据库(非关系型数据库),你必须在多个请求之间进行权衡,并包括一些数据冗余。

您应该分别分析每个案例并考虑一些方面,例如:

  1. 访问这些数据的频率是多少?
  2. 这种冗余占用多少空间?
  3. 为了拥有所有数据,我必须做多少次请求才能没有冗余?
  4. 效果是个问题?
  5. 在您的情况下,我建议为每个用户保留Set / Hash或JSON编码数据,其中包含所有近期用户交互的历史记录,例如评论,喜欢等。每次用户访问Feed时,您只需阅读饲料和历史;只有两个请求。

    要注意的是,每次用户交互时,您都必须更新所有冗余数据。