Ruby on rails Dalli vs Redis Store for Rails应用程序

Ruby on rails Dalli vs Redis Store for Rails应用程序,ruby-on-rails,ruby-on-rails-3.1,redis,memcached,Ruby On Rails,Ruby On Rails 3.1,Redis,Memcached,到目前为止,我一直在使用缓存,今天我遇到了 我想知道我是否应该切换到Redistore。我的应用程序已经在某些方面使用了redis,所以我有一个相当大的redis服务器(就资源而言),我还有另一个memcached服务器。因此,如果我想切换到redis store,这意味着我可以删除memcached服务器(需要维护的服务器更少+成本更低) 有人对这两种解决方案进行过比较吗 演出 这是一个临时替代品(我可以在不更改代码的情况下随时在这两个之间切换吗) 还有什么我应该知道的吗 Redis既可以用作

到目前为止,我一直在使用缓存,今天我遇到了

我想知道我是否应该切换到Redistore。我的应用程序已经在某些方面使用了redis,所以我有一个相当大的redis服务器(就资源而言),我还有另一个memcached服务器。因此,如果我想切换到redis store,这意味着我可以删除memcached服务器(需要维护的服务器更少+成本更低)

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

  • 演出
  • 这是一个临时替代品(我可以在不更改代码的情况下随时在这两个之间切换吗)
  • 还有什么我应该知道的吗

  • 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时,我会说,同时使用这两种技术