如何在Redis中执行“左连接”?

时间:2013-09-18 01:32:30

标签: join redis node-redis

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

e.g。假设我有像

这样的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 left outer join,但我正在尝试使用redis实现它。我正好难以理解如何在redis中有效地表达这一点。

1 个答案:

答案 0 :(得分: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:投票支持1

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

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