ruby-on-rails - redis - 存储用户喜欢

标签 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) 的速度,有没有更好的方法?

最佳答案

改为使用 Set - 它确保没有重复(即用户不能两次喜欢帖子)并且您可以快速检查是否存在,即(假设 redis-rb):

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

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

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

关于ruby-on-rails - redis - 存储用户喜欢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454290/

相关文章:

ruby-on-rails - 对 HTTP POST 参数命名约定的偏好?

c# - 在 .NET 中使用整数填充列表的更简单方法

wpf - ServiceStack Redis 搜索很慢。如何优化?

ruby-on-rails - 即时构建 rails Form 和 Form_Fields

ruby-on-rails - Rails 解析日期问题

列表理解唯一值

Redis 集群实例比独立实例消耗更多内存?

php - 如何在 php 中获取 redis->lpush() 的返回值?

ruby-on-rails - 使用 devise-async 发送电子邮件不起作用 (Rails/Sidekiq)

python - 将简单的数字列表转换为 JSON 数组