假设我有一个类似于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中有效地表达这一点。
答案 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
,对该帖子的投票。或者,如果您只需要记录累积分数,只需保留一个计数器。