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

我想知道是否应该切换到redisstore。我的应用程序已经将Redis用于某些内容,因此我有一个很大的Redis服务器(就资源而言),另外还有一个Memcached服务器。因此,如果我在哪里切换到Redis存储,那意味着我可以删除内存缓存服务器(更少的服务器来维护+更少的成本)。

有谁做过这两种解决方案的比较。

  • 性能
  • 是否可以直接替换(我可以随时在这两个之间切换而无需更改代码)
  • 其他我应该知道的东西。
  • 最佳答案

    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的那一刻,我想同时使用它们。

    关于ruby-on-rails - Dalli vs Redis-Store for Rails应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11076902/

    10-15 10:06
    查看更多