如何在Redis中执行“left join”操作?

4
假设我有一个类似于Reddit或Stack Overflow的结构。
例如,假设我有一个类似以下JSON结构的数据:
posts = [{id: 1, title: "foo", pages: 300}, {id: 2, title: "bar", pages: 300}]

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

如何获得类似于这个结果(获取一个帖子并附加用户对该项目的投票,假设已知用户ID为1)?
posts = [{id: 1, title: "foo", pages:300, vote: "upvote"}] 

目前我正在使用 SQL 左外连接,但是想尝试使用 Redis 实现。只是我很难理解如何在 Redis 中有效地表达它。
1个回答

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,其中包含该帖子的投票。或者,如果您只需要跟踪累积得分,则只需保留计数器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接