4

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

例如假设我有一个像

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中有效地表达这一点。

4

1 回答 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:s 对帖子的投票1

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

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

于 2013-09-18T08:49:46.130 回答