redis - 存储用户喜欢
redis - store user likes
我目前正在学习 Redis,我想向用户展示他是否喜欢 post,例如在 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 是否在该列表中,以判断他是否已经喜欢 post。但这是一个O(n) 的速度,有没有更好的方法?
改用 Set - 它确保没有重复(即用户不能喜欢 post 两次)并且您可以快速检查是否存在,即(假设 redis-rb):
redis.sadd 'post:{#post_id}:likes', '{#user_id}'
请注意,为了进行反向查询,获取用户喜欢的页面列表,您需要为每个用户保留另一个 Set,例如:
redis.sadd 'user:{#user_id}:likes' '{#post_id}'
我目前正在学习 Redis,我想向用户展示他是否喜欢 post,例如在 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 是否在该列表中,以判断他是否已经喜欢 post。但这是一个O(n) 的速度,有没有更好的方法?
改用 Set - 它确保没有重复(即用户不能喜欢 post 两次)并且您可以快速检查是否存在,即(假设 redis-rb):
redis.sadd 'post:{#post_id}:likes', '{#user_id}'
请注意,为了进行反向查询,获取用户喜欢的页面列表,您需要为每个用户保留另一个 Set,例如:
redis.sadd 'user:{#user_id}:likes' '{#post_id}'