Jos*_*hin 21 memcached ruby-on-rails redis ruby-on-rails-3.1
我一直在使用Dalli进行缓存,今天我遇到了Redis -Store.
我想知道我应该切换到redisstore.我的应用程序已经使用redis来处理某些东西,所以我有一个redis服务器,它相当大(在资源方面),我还有另一个memcached服务器.因此,如果我在哪里切换到redis-store,那就意味着我可以删除memcached服务器(减少服务器维护+更少的成本).
有谁做过这两种解决方案的比较.
Jav*_*rez 21
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时,我会说同时使用它们.
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |