因为我们项目上没有使用过两种,而我依旧对他们孰优孰劣比较好奇。
所以我逛了很多国内外的网站,得到了以下的结论。
首先,Redis和Memcached是两款非常给力的、快速的、并且都是使用内存做分布式缓存数据的服务。对于提升我们网站的的性能有很大的帮助(通过缓存数据、HTML片段或其他)。
接下来,通过几点来进行对比:
读写速度
- 都非常快。总体上显示,redis的速度与memcached几乎一样快。
内存的使用
- memcached:设置缓存空间大小,但当插入项时,守护进程就会自动增加空间大小。没有真正的方法来回收这些空间。所有的键都可能过期,可以刷新数据库,它仍然会使用配置的全部RAM。
- redis:Redis永远不会使用超出我们设置的空间大小。并且它会智能返回不需要的空间,例如:我将100,000个2KB的字符串(200MB)存储在这两个字符串中。Memcached RAM的使用增加到225MB。Redis RAM的使用增加到228MB。在刷新了这两个数据之后,redis删除了29MB,而memcached则保持在225MB。
- 磁盘I/O:对于redis来说,这是一个明显的优势,因为它在缺省情况下是这样做的,并且具有可配置的持久性。在没有第三方工具的情况下,Memcached没有向磁盘转储的机制。
memcached
- Memcached是一个简单易变的高速缓存服务器。它允许您将键/值对存储在一个值限制为1MB的字符串中。
- 我们可以快速的访问这些值,这个速度指的是网络或内存带宽的饱和。
- 当您重新启动memcached时,数据就会消失。这对于缓存来说是很好的。我们不应该把重要的东西储存在那里。
redis
- Redis可以像memcached一样完成相同的工作,而且可以做得更好。
- Redis也可以充当缓存。它也可以存储键/值对。redis,可以达到512MB。
- 可以关闭持久性,并且在重新启动时也会丢失数据。
- 它的速度也非常快,经常受到网络或内存带宽的限制。
- Redis有集群支持,并带有高可用性的工具(redis-sentinel)。在过去的几年中,redis也成为了第三方工具的领导者。Redis Labs、亚马逊等公司提供了许多有用的Redis工具和服务。围绕redis的生态系统要大得多。大规模部署的数量现在可能比memcached更大。
Redis不仅仅是一个缓存。它是一个内存中的数据结构服务器。
Redis的文档比memcached更完善
容灾
- 在快照模式中,突然崩溃可能导致少量丢失的数据。如果您绝对需要确保没有数据丢失,不要担心,redis也有AOF (Append Only File) 模式。
支持更多的数据类型
- Memcached仅限于字符串,但Redis作为一个数据结构服务器,可以提供多种不同的数据类型。它还提供了所需的命令,以充分利用这些数据类型。例如:Strings、Hashes、Lists、Sets等等(查看数据类型官方文档)
事物性和原子性
- redis中的命令是原子性的,这意味当向redis写入一个值时,所有连接到redis的客户端都可以看到该值。
- 从技术上讲,memcached也是原子性的。
流水线
- Redis提供了一个名为“流水线”的特性。如果有许多想要执行的redis命令,可以使用管道将它们发送到redis,而不是一次一次。
- 通常,当对redis或memcached执行命令时,每个命令都是一个单独的请求/响应周期。通过使用管道,redis可以缓冲多个命令,并一次性执行所有命令,响应所有命令。
总结
memcached,它是一个强大的、简单的、稳定的、成熟的工具。甚至还有一些情况,它比redis快一些。
如果您已经在使用memcached缓存,如果它满足您的需要,那么就继续使用它。如果是新的项目,我推荐您使用redis。
非常感谢您的耐心观看,您的关注是我最大的动力! 不积跬步无以至千里,不积小流无以成江海!