【问题标题】:Dalli vs Redis-Store for Rails AppDalli vs Redis-Store for Rails App
【发布时间】:2012-06-20 01:43:28
【问题描述】:

直到现在我一直使用Dalli 进行缓存,今天我遇到了Redis -Store

我想知道我应该切换到 redisstore。我的应用程序已经将 redis 用于某些东西,所以我有一个非常大的 redis 服务器(就资源而言),我还有另一个 memcached 服务器。因此,如果我在哪里切换到 redis-store,这意味着我可以移除 memcached 服务器(需要维护的服务器更少 + 成本更低)。

有没有人对这两种解决方案进行过比较。

  1. 性能
  2. 是否可以直接替换(我可以随时在这两者之间切换而无需更改代码)
  3. 我应该知道的任何其他内容。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 redis memcached


    【解决方案1】:

    Redis 可以用作缓存或永久存储,但如果您尝试将两者混合使用,最终可能会遇到“有趣的问题”。

    当你有 memcached 时,你有一个进程的最大内存量,所以当 memcached 满时,它会自动删除最近最少使用的条目,为新条目腾出空间。

    您也可以将 Redis 配置为具有该行为,但如果您将 Redis 用于持久存储,则不希望这样做,因为在这种情况下,您可能会丢失本应持久存储的密钥。

    因此,如果您为 Redis 使用持久存储,则需要有两个不同的 Redis 进程:一个用于持久键,一个用于缓存。当然,您总是可以只有一个进程并为每个缓存项设置过期时间,但没有人会保证在它们过期之前您不会达到内存限制并丢失数据,因此实际上您需要两个进程。此外,如果您正在为持久数据设置主/从配置,并且将缓存存储在同一台服务器上,那么您基本上是在浪费 RAM,因此可以采用单独的进程。

    关于性能,redis 和 memcached 的性能都非常好,并且在不同的测试中,它们在获取/提取数据时处于相同的范围内,但是当您只需要缓存时,memcached 更好。

    为什么会这样?首先,由于 memcached 只有一个任务,即存储键/值,因此在存储元数据时没有任何开销。另一方面,Redis 提供了不同的数据结构,因此它存储了每个键的更多元数据。这方面的一个例子:将数据存储在 Redis 中的散列上而不是使用单独的键要“便宜”得多。你不会在 memcached 上得到任何这些,因为只有一种类型的数据。这意味着在您的服务器中使用相同数量的内存,您可以在 memcached 上存储比在 redis 上更多的数据。如果你有一个相对较小的安装,你并不在乎,但是当你开始看到增长的那一刻,相信我你会想要控制这些数据。

    因此,尽管我喜欢 Redis,但我更喜欢使用 memcached 来满足我的缓存需求,而使用 redis 来满足我的持久存储/临时存储/队列需求。我仍然将 redis 用作“缓存”,但不是具有过期的临时缓存,而是用作查找缓存以节省从更昂贵的存储中读取的内容。例如,我在 Redis 上保留了用户 ID 和昵称之间的映射。我永远不会过期这些映射,所以 Redis 是一个完美的地方。

    如果您正在处理少量数据,那么您可能会认为使用单一技术处理所有事情可能是有意义的,但是当您开始增长超过数百 MB 时,我会说两者兼而有之其中。

    【讨论】:

    • 8 年后仍然是一个很好的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多