73.Redis 和 Memcached 的区别有哪些?

? 1. Redis 支持复杂的数据结构

  • Memcached 仅提供简单的字符串。
  • Redis 提供复杂的数据结构,丰富的数据操作。

也因为 Redis 支持复杂的数据结构,Redis 即使晚于 Memcached 推出,却获得更多开发者的青睐。

Redis 相比 Memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作,Redis 会是不错的选择。

? 2. Redis 原生支持集群模式

  • 在 Redis3.x 版本中,官方便能支持 Cluster 模式。
  • Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。

? 3. 性能对比

  • Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis在存储小数据时比 Memcached 性能更高。
  • 在 100k 以上的数据中,Memcached 性能要高于 Redis 。虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。

更多关于性能的对比,可以看看 《Memcached 与 Redis 的关键性能指标比较》

? 4. 内存管理机制不同

相比来说,Redis 的内存管理机制,会更加简单。

  • Redis 采用的是包装的 malloc/free ,使用时现场申请的方式。
  • Memcached 采用的是 Slab Allocation 机制管理内存,预分配的内存池的方式。

如果对比两者的内存使用效率:

  • 简单的 Key-Value 存储的话,Memcached 的内存利用率更高,可以使用类似内存池。
  • 如果 Redis 采用 hash 结构来做 key-value 存储,由于其组合式的压缩, 其内存利用率会高于 Memcached 。

? 5. 网络 IO 模型

  • Memcached 是多线程,非阻塞 IO 复用的网络模型,原型上接近 Nignx 。
  • Redis 使用单线程的 IO 复用模型,自己封装了一个简单的 AeEvent 事件处理框架,主要实现了 epoll , kqueue 和 select ,更接近 Apache 早期的模式。

? 6. 持久化存储

  • Memcached 不支持持久化存储,重启时,数据被清空。
  • Redis 支持持久化存储,重启时,可以恢复已持久化的数据。

也推荐阅读下 《脚踏两只船的困惑 - Memcached 与 Redis》