2012-06-18 81 views
20

我一直在使用Dalli直到现在缓存,今天我遇到了Redis -StoreDalli vs Redis-Store for Rails应用程序

我想知道应该切换到redisstore。我的应用程序已经使用Redis的某些东西,所以我有一个相当大的Redis服务器(在资源方面),我也有另一个memcached服务器。所以如果我在哪里切换到redis-store,这意味着我可以删除memcached服务器(维护更少的服务器+成本更低)。

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

  1. 性能
  2. 它是一个简易替换
  3. 任何其他的东西,我应该知道的(可随时随地我没有代码更改这两个之间进行切换)。

回答

19

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

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

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

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

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

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

因此,尽管我喜欢Redis,但我更喜欢为我的缓存需求提供memcached,为我的持久性存储/临时存储/队列需求提供redis。我仍然使用redis作为“缓存”,但不是临时的到期缓存,而是作为查找缓存来保存更昂贵的存储中的读取。例如,我在Redis上保留用户ID和昵称之间的映射关系。我从来不会过期这些映射,所以Redis是一个完美的地方。

如果你正在处理少量的数据,那么你可能有理由对所有的东西都有单一的技术,但是当你开始增长到几百MB时,我会说去两个都。

相关问题