redis - 存储用户喜欢的

时间:2015-04-05 05:05:04

标签: ruby-on-rails list redis

我目前正在学习Redis,我想向用户展示他是否已经喜欢过帖子,就像在facebook上一样。

我在考虑存储一个用户ID列表,如下所示:

$redis.rpush('users_liked_post_#{post_id}', user_id)

$redis.lrange('users_liked_post_#{post_id}', 0, -1)

# [34, 23, 433, 432, 324]

然后检查用户ID是否在该列表中,以判断他是否已经喜欢该帖子。但它是O(n)速度,还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

使用套装 - 它确保没有重复(即用户不能两次发帖),你可以快速检查存在,即(假设redis-rb):

redis.sadd 'post:{#post_id}:likes', '{#user_id}'

请注意,为了执行反向查询,获取用户喜欢的页面列表,您需要为每个用户保留另一个具有相似内容的Set,例如:

redis.sadd 'user:{#user_id}:likes' '{#post_id}'