Rails和缓存,切换memcache和redis容易吗?

27

是否存在一个常用的 API,使得当我在Redis和Memcached之间切换时,我不需要改变我的代码,只需更改配置设置?

3个回答

43
只要您不手动初始化Memcached客户端,而是依赖于Rails.cache的公共API,从Memcached切换到Redis只需安装redis-store并更改配置。
config.cache_store = :memcached_store
config.cache_store = :redis_store

了解有关Rails.cache的更多信息


1
如何在不最终耗尽内存的情况下,同时使用Redis进行片段缓存和Sidekiq作业?是否可以使用同一Redis实例始终持久化Sidekiq作业,但对片段使用先进先出(FIFO)方法? - Mohamad

39

虽然我不想影响你的目标,但我建议不要在Rails通用缓存中使用Redis,而应该使用Memcached。

我在一个大型Rails应用程序中广泛使用Redis和Resque,认为将缓存、原始Redis和Resque整合到一起会很好。但是我遇到了几个大问题:

  1. 首先,Redis比Memcached慢。可能完全取决于我的具体用途、Redis-Store库或Redis本身。我不想说Redis有什么不好,但你可能需要花费大量时间切换到Redis,而Memcached已经“只管运行”了。
  2. Memcached非常容易添加服务器并使用一致性哈希来实现你的目标。Redis也有此功能,但在我的经验中,同时将Redis视为某些部分的单片数据存储和其他部分的分布式、一致地散列的缓存存储是很困难的。

祝你的项目好运。我喜欢Redis和Memcached,并在所有项目中使用它们,但我让其中一个作为强大的数据结构服务器,让另一个作为缓存服务。


9
作为简单的键值存储,Memcached 比 Redis 具有更高的吞吐量,因为 Memcached 是多线程的,而 Redis 是单线程的。因此,Redis 在达到其峰值性能时很快就会消耗掉一个 CPU 核心的 100% 使用率,而 Memcached 将愉快地使用尽可能多的 CPU 核心,因此在其最大吞吐量方面具有更高的可扩展性。在单核系统中(谁还使用这些?),Redis 可能更快,但只有在利用它的附加数据类型、持久性或其他功能时,Redis 才真正有益。 - ColinM
2
这真的没有回答问题,而且我不认为你一次的经历就足以建议不要使用Redis缓存,因为有很多人正在成功地使用它来实现此目的。 - Yarin
这个评论让我省了很多时间来调试应用程序。在我的Rails应用程序中,即使在较小的2核系统上,Memcache也要快得多。 - Aglystas

2
Redis的优点之一是缓存“基于列表的”内容 - 在应用程序中发生时将这些内容推送/弹出列表。与从memcached反序列化大型值,编辑它,然后重新序列化不同。这可以在ruby代码中使用自定义过滤器完成,而不是基本的rails缓存。

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