【问题标题】:How to perform a "left join" in Redis?如何在 Redis 中执行“左连接”?
【发布时间】:2013-09-18 01:32:29
【问题描述】:

假设我有一个类似于 reddit 或堆栈溢出的结构。

例如假设我有一个像

这样的json结构
posts = [{id: 1, title: "foo", pages: 300}, {id: 2, title: "bar", pages: 300}]

votes = [{user_id: 1, post_id: 1, vote: "upvote"}]

我怎样才能得到与此类似的结果(获取帖子并附上用户对该项目的投票,假设已知 user_id 为 1):

posts = [{id: 1, title: "foo", pages:300, vote: "upvote"}] 

目前我正在使用 sql 左外连接,但我正在尝试使用 redis 来实现它。我只是很难思考如何在 redis 中有效地表达这一点。

【问题讨论】:

    标签: join redis node-redis


    【解决方案1】:

    您可以将投票存储为每个用户的排序集(例如,得分为 1 为上,得分为 -1 为下):

    # Register upvote for post 1
    ZADD votes:user:1 1 1
    # Register downvote for post 2
    ZADD votes:user:1 -1 2
    

    正在获取用户1:s 对帖子1的投票:

    ZSCORE votes:user:1 1
    # => "1"
    

    如果您需要引用另一个方向的投票(给定帖子的所有投票),您可以简单地保留一个类似的集合,例如votes:post:1,为该帖子投票。或者,如果您只需要跟踪累积分数,只需保留一个计数器。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2014-11-26
      • 2018-02-10
      • 1970-01-01
      • 2018-04-08
      • 2021-07-25
      • 2014-09-17
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多