redis与memcache的区别对比

redis与memcache的区别对比

前言

redis 和memcache都是工作在内存的分布式数据库,速度很快效率高,都可以用作缓存。二者相同点很多,但是无论是面试官还是生产环境选型都会拿二者做对比。今天我就和大家详细介绍下二者的不同,以及在生产环境该如何选择?

redis的特点

  • memcache能够实现的,redis都可以实现。memchache更像是redis功能的一个子集。
  • 复杂多样的数据结构 (字符串,列表,hash, 集合,有序集合五种数据类型。这就意味着能够实现更多的功能,而memcache无法满足这些需求)
  • 原生持久化(AOF,RDB,重要数据存储在缓存中,为了防止因为重启或者故障清空需要持久化。但是redis不能当作数据库来用,因为定义快照并不能保证数据不丢失,你会说可以开启aof,但是当缓存数据量过大的时候,开启aof会降低效率,并且数据量过大,磁盘空间将会成为瓶颈,总结一句话就是,不要让工具做它不擅长的事情!)
  • 天然高可用(redis原生支持高可用功能,可以实现主从复制,哨兵模式,redis集群模式,而memcache要实现高可用,需要进行二次开发,例如客户端的双读双写,或者服务端的集群同步)
  • redis存储的内容比较大(memcache的value存储最大是1M,如果存储value很大,只能选择redis)

哎,通过介绍redis的特点,感觉字里行间都充斥着memcache不行。但是如果是以下场景,可以选择memcache

memcache特点

纯key-value ,而且数据量特别大,并发量非常大的业务,选用Memcache更合适,为什么呢?这要从Memcache和redis底层差异来说。

  • 虽然数据类型单一,但是memcache的内存管理机制导致无碎片,这让memcache工作更加稳定,而redis本身也考虑到自己功能复杂,会产生碎片,并且容易崩溃,所以支持高可用。
  • 内存分配 (memchache使用预分配内存池的方式管理内存,能够省区内存分配的时间,这个节省的时间在数据量很大的时候还是很可观的。而redis则是临时申请空间,可能导致碎片)
  • 虚拟内存使用(memcache把所有的数据都储存在内存中。redis有自己的虚拟内存机制,理论上能够存储比物理内存更多的数据,当数据超量时,会触发swap,把冷数据刷到磁盘上,在数据量大的场景数据由于memcache数据都在内存里,(redis3.0这个vm机制已经废除掉了)此时memcache更快)
  • 网络模型(memcache采用非阻塞io复用模型,redis也是使用非阻塞IO复用模型,但是redis由于还存在一些非key-value之外的排序,聚合功能,在执行这些功能的时候,复杂的cpu计算会阻塞整个io调度。在这一点上,由于redis功能较多,memcache更快一些)。
  • 线程模式(redis采用单线程,虽然没有锁冲突,但是很难利用多核特性提升整体吞吐量,memcache采用多线程,主线程监听,work子线程接受请求,执行读写,可能存在锁冲突,但是memcache更快一点)

如何选择

如果你的业务场景是:

1.缓存不需要持久化,只为了快,并且不需要多种数据结构的时候,可以选择Memcache。

2.如果想利用redis多种数据类型实现多功能,缓存需要持久化。选择redis更好一些。

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...