代码之家  ›  专栏  ›  技术社区  ›  markquezada

Redis和Memcache还是Redis?

  •  82
  • markquezada  · 技术社区  · 14 年前

    我使用memcached在我的Rails 3应用程序中通过简单的 Rails.cache 现在我想用redis和resque做一些后台工作处理。

    我觉得他们有足够的不同,可以保证两者都用。不过,在heroku上,同时使用memcached和redis的费用是分开的。使用两者还是应该迁移到只使用redis?

    我喜欢使用memcached进行缓存,因为最近最少使用的键会自动从缓存中推出,而且我不需要缓存数据持久化。Redis对我来说基本上是新的,但我知道它在默认情况下是持久的,并且密钥不会自动从缓存中过期。

    编辑:只是想更清楚地回答我的问题。我知道只用Redis而不是两者都用是可行的。我想我只是想知道这样做是否有什么特别的缺点?考虑到实现和基础设施,有什么理由让我不应该只使用Redis吗?(也就是说,对于简单的缓存,memcached是否更快?)我也没有找到确切的答案。

    6 回复  |  直到 14 年前
        1
  •  49
  •   markijbema    13 年前

    假设从memcached迁移到redis进行缓存已经很容易了,那么我使用redis只是为了保持简单。

    在redis中,持久性是可选的,所以如果您想要的话,可以像memcached那样使用它。您甚至可能会发现,使缓存持久化对于避免重新启动后出现大量缓存未命中非常有用。Expiry也可用-算法与memcached有点不同,但不足以满足大多数目的-请参阅 http://redis.io/commands/expire 详细情况。

        2
  •  44
  •   Luca Guidi    13 年前

    我是 redis-store ,不需要直接使用Redis命令,只需使用 :expires_in 像这样的选项:

    ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes

    使用Redis的好处是速度快,用我的gem,你已经有了 Rack::Cache , Rails.cache I18n .

        3
  •  19
  •   tRuEsAtM    7 年前

    我见过一些同时使用Memcached和Redis的大型rails站点。Memcached用于一些短暂的东西,这些东西在内存中保持热状态很好,但如果需要的话可以丢失/重新生成,而Redis则用于持久存储。两者都用于从主数据库中卸下负载,以执行读/写繁重的操作。

    更多细节:

    内存缓存: 用于页面/片段/响应缓存,并且可以在Memcached上达到内存限制,因为它将LRU(最近使用最少的一个)使旧的内容过期,并且经常使访问的密钥在内存中保持热状态。重要的是,如果需要,Memcached中的任何内容都可以从数据库中重新创建(这不是您的唯一副本)。但是你可以一直往里面扔东西,Memcached会找出哪些是最常用的,并把它们保存在内存中。您不必担心从Memcached中删除内容。

    redis公司: 你用它来处理你不想丢失的数据,并且足够小,可以放在内存中。这通常包括resque/sidekiq作业、速率限制计数器、分割测试结果或任何您不想丢失/重新创建的内容。你不想超过这里的内存限制,所以你必须对以后存储和清理的内容更加小心。

    Redis一旦超过内存限制就会出现性能问题(如果我错了,请纠正我)。通过将Redis配置成Memcached和LRU expire之类的东西,可以解决这个问题,所以它永远不会达到内存限制。但是你不想用你在Redis中保存的所有东西,比如resque jobs。因此,Rails.cache设置为使用Memcached(使用 dalli 宝石)。然后他们会保留一个单独的$redis=。。。要执行redis操作的全局变量。

    # in config/application.rb
    config.cache_store = :dalli_store  # memcached
    
    # in config/initializers/redis.rb
    $redis = $redis = Redis.connect(url: ENV['REDIS_URL'])
    

    可能有一种简单的方法可以在Redis中实现这一切——也许有两个单独的Redis实例,一个具有LRU硬内存限制,类似于Memcache,另一个用于持久存储?我还没见过这个用过,但我想它是可行的。

        4
  •  15
  •   Community c0D3l0g1c    7 年前

    我会考虑看看我对这个问题的回答:

    Rails and caching, is it easy to switch between memcache and redis?

    从本质上讲,根据我的经验,我主张将它们分开:memcached用于缓存,redis用于数据结构和更持久的存储

        5
  •  6
  •   Yarin    10 年前

    我问小组 Redis Labs (谁提供 Memcached Cloud Redis Cloud 附加组件)关于他们推荐用于Rails缓存的产品。他们说,一般来说,他们会推荐Redis云,Memcached云主要是为遗留目的提供的,并指出他们的Memcached云服务实际上是建立在Redis云之上的。

        6
  •  4
  •   salezica    14 年前

    我不知道你在用它们做什么,但实际上两者都能给你带来性能上的优势:Memcached比Redis在多个核上运行的性能要好得多,所以用Memcached缓存最重要的数据,其余的放在Redis中,利用它作为数据库的能力,可以提高性能。