无法理解Redis如何与Rails配合工作

6

我是新手,在学习Redis基础知识时感觉非常容易,但当我尝试理解如何在Rails中使用它时,会变得困难,我找不到任何很好的教程来从头开始讲解步骤,例如我发现像这样的代码:

class User < ActiveRecord::Base
   # follow a user
   def follow!(user)
     $redis.multi do
       $redis.sadd(self.redis_key(:following), user.id)
       $redis.sadd(user.redis_key(:followers), self.id)
     end
   end

  # unfollow a user
  def unfollow!(user)
    $redis.multi do
      $redis.srem(self.redis_key(:following), user.id)
      $redis.srem(user.redis_key(:followers), self.id)
    end
  end

但是在这个例子中,没有其他例子展示如何使用follow方法,我需要传递什么对象给这个方法(这个对象来自关系型数据库吗?或者是其他的什么对象)等等...
我在搜索中找到的所有例子都是不完整的,当我们决定将Redis与Rails一起使用时,这使得Redis变得不容易!
我还发现,在从ActiveRecord继承的模型中使用Redis,我无法理解:如果Redis在大多数情况下与关系型数据库或单独使用,最常用的方式是什么,以及具体的方式是什么?
我知道我的问题很广泛,但我想知道如何将Redis和Rails一起使用,如果您有好的资源,我将非常感激。谢谢
1个回答

8

没有其他示例展示如何使用follow方法,我需要传递什么对象给这个方法(这个对象来自关系型数据库吗?还是其他什么东西?)等等...

用户是ActiveRecord对象--您系统中的用户。

friend = User.find(params[:friend_id])
current_user.follow! friend

通常情况下,Redis被用作二级数据存储。常规用户数据、客户数据等存储在Postgres或MySQL中,而与Redis特定相关的数据存储在Redis中。
RailsCasts 399 on autocomplete中,Ryan展示了如何使用Redis作为书店搜索引擎的补充。他使用了$redis.zrevrange$redis.zincrby

如果我在Redis中存储用户取消关注者的ID,这里有什么优势呢?最终我将从MySQL/Postgres中提取他们的信息!! - medBouzid
优势在于拉取您关注的人列表时几乎保持恒定时间。对于数百万行数据,这个查询在标准数据库中需要很长时间。 - Jesse Wolgamott
是的,抱歉我忘了这个。你是唯一回答我的问题的人,我认为你的答案是最好的 :) 谢谢。只是如果你能解释一下“redis_key”函数是做什么的?就像你在例子中看到的“self.redis_key(:following)”,谢谢。 - medBouzid
好的,谢谢。如果有其他资源,我会进行研究。如果您能创建一篇关于这个主题的清晰博客文章,那将对像我这样的许多人非常有帮助 :D - medBouzid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接