我们正在使用带有Redis服务器的Ruby web应用程序进行缓存。是否需要测试Memcached?

什么能给我们更好的表现?Redis和Memcached有什么优缺点吗?

需要考虑的要点:

读/写速度。内存使用情况。磁盘I/O转储。缩放比例。


当前回答

如果你对性能感兴趣,Memcached会更快,甚至因为Redis涉及网络(TCP调用)。内部Memcache也更快。

正如其他答案所提到的那样,Redis有更多的功能。

其他回答

Redis更好。

Redis的优点是,

它有很多数据存储选项,如字符串、集合、排序集合、哈希、位图记录的磁盘持久性存储过程(LUA脚本)支持可以使用PUB/SUB充当消息代理

而Memcache是内存中的键值缓存类型系统。

不支持各种数据类型存储,如列表、集合再贴现。主要缺点是Memcache没有磁盘持久性。

Memcached擅长作为一个简单的键/值存储,并且擅长执行key=>STRING。这使得它非常适合会话存储。

Redis擅长做key=>SOME_OOBJECT。

这真的取决于你要放什么。我的理解是,就性能而言,他们相当均衡。

如果你确实找到了一些客观的基准,也祝你好运。

在以下情况下使用Redis

您需要有选择地删除/过期缓存中的项目。(你需要这个)您需要能够查询特定类型的键。等式“blog1:帖子:*”,“blog2:类别:xyz:帖子:”。哦,是的!这是非常重要的。使用此选项可以选择性地使某些类型的缓存项无效。您还可以使用它使片段缓存、页面缓存、仅给定类型的AR对象等无效。持久性(你也需要这个,除非你对缓存在每次重启后都要预热感到满意。这对于很少改变的对象来说非常重要)

在以下情况下使用memcached

Memcached让你头疼!嗯。。。集群?无聊的。如果你想做到这一点,请使用Varnish和Redis缓存片段和AR对象。

根据我的经验,Redis的稳定性比Memcached要好得多

这里没有指出的一个主要区别是Memcache始终有内存上限,而Redis在默认情况下没有(但可以配置为)。如果您总是希望在一定时间内存储一个键/值(并且永远不会因为内存不足而将其逐出),那么您需要使用Redis。当然,你也有内存不足的风险。。。

Memcached是多线程和快速的。

Redis有很多功能,而且速度非常快,但完全限于一个内核,因为它基于一个事件循环。

我们两者都使用。Memcached用于缓存对象,主要减少数据库的读取负载。Redis用于诸如排序集之类的东西,这对于汇总时间序列数据非常方便。