【Redis】Memcached和Redis的区别
一、Redis与Memcached的区别
两者都是非关系型内存键值数据库,现在公司一般都是用 Redis 来实现缓存,为什么不用Memcached呢?接下来分析一下Redis、Memcached的区别:
1、线程模型
Memcached处理请求采用多线程模型
,并且基于IO多路复用技术
,主线程接收到请求后,分发给子线程处理。
优点是当某个请求处理比较耗时,不会影响到其他请求的处理。缺点是CPU的多线程切换必然存在性能损耗,同时,多线程在访问共享资源时必然要加锁,也会在一定程度上降低性能。
Redis同样采用IO多路复用技术
,但它处理请求采用是单线程模型
,从接收请求到处理数据都在一个线程中完成。
缺点一旦某个请求处理耗时比较长,那么整个Redis就会阻塞住,直到这个请求处理完成后返回,才能处理下一个请求,使用Redis时一定要避免复杂的耗时操作。由于Redis是内存数据库,它的访问速度非常地快,所以它的性能瓶颈不在于CPU,而在于内存和网络带宽,这也是作者采用单线程模型的主要原因
。同时,单线程对于程序开发非常友好,调试起来也很方便。开发多线程程序必然会增加一定的调试难度。
Redis6.0又进一步完善了多线程,在接收请求和发送请求时使用多线
,进一步提高了处理性能。
2、数据结构
Memcached支持的数据结构很单一,仅支持string类型的操作。并且对于value的大小限制必须在1MB以下,过期时间不能超过30天。使用Memcached时,我们只能把数据序列化后写入到Memcached中。然后再从Memcached中读取数据,再反序列化为我们需要的格式。
而Redis对于不同的数据结构可以采用不同的操作方法,非常灵活。
3、 淘汰策略
Memcached必须设置整个实例的内存上限,数据达到上限后触发LRU淘汰机制,优先淘汰不常用使用的数据。但它的数据淘汰机制存在一些问题:刚写入的数据可能会被优先淘汰掉,这个问题主要是它本身内存管理设计机制导致的。
Redis没有限制必须设置内存上限,如果内存足够使用,Redis可以使用足够大的内存。同时Redis提供了多种淘汰策略:
4、持久化
Memcached不支持数据的持久化,如果Memcached服务宕机,那么这个节点的数据将全部丢失。
Redis支持将数据持久化磁盘上,提供RDB和AOF两种方式。
5、 高可用
Memcached没有主从复制架构,只能单节点部署,如果节点宕机,那么该节点数据全部丢失。业务需要对这种情况做兼容处理,当某个节点不可用时,把数据写入到其他节点以降低对业务的影响。
Redis拥有主从复制架构和哨兵节点,在主节点宕机时,主动把从节点提升为主节点,继续提供服务。主从两个节点还可以提供读写分离功能,进一步提高程序访问的性能。
6、集群化
Memcached的集群化是在客户端采用一致性哈希算法向指定节点发送数据,当一个节点宕机时,其他节点会分担这个节点的请求。
而Redis集群化采用的是每个节点维护一部分虚拟槽位,通过key的哈希计算,将key映射到具体的虚拟槽位上,这个槽位再映射到具体的Redis节点。同时每个Redis节点都包含至少一个从节点,组成主从架构,进一步提高每个节点的高可用能力。当增加或下线节点时,需要手动触发数据迁移,重新进行哈希槽位映射。
二、总结:

如果你的业务需要各种数据结构给予支撑,同时要求数据的高可用保障,那么选择Redis是比较合适的。
如果你的业务非常简单,只是简单的set/get,并且对于内存使用并不高,那么使用简单的Memcached足够。
猜你喜欢
- 【阿里云】日志服务sls查询语句SPL
- 一、阿里云日志服务SPL语法归纳1.SPL简介SPL(SearchProcessingLanguage)用于查询和处理日志数据,支持检索、过滤、分析日志。2.基本查询语法查询所有日志:* 1...
- 【Docker】Docker常用命令
- Docker常用命令一、启动类1.启动docker2.关闭docker3.重新启动docker4.docker设置自启动5.查看docker运行状态6.查看docker版本号等信息7.docker帮助...
- 【Redis】Redis的主从复制和哨兵模式
- Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster(集群)模式。 主从模式:从节点异步的从主节点复制数据,这种架构主节点故障后无法自动切主。类似于mysql的主从复制。 哨兵模式:该模式在主从复制基础上加了一个哨兵集群负责监控主节点和从节点。如果检测到主节点故障,系统可以自动将从节点晋升为新的主节点。实现了自动故障转移。类似于mysql的主从复制+MHA。 集群模式:主从模式面临内存容量和写入性能的限制,因为这种模式的写入能力仍然局限于单个节点。为了解决这一问题,Redis在3.x版本之后推出了Cluster集群模式。Cluster模式通过数据分片和节点的水平扩展,实现了更高效的内存利用和写入性能。类似于mysql的mycat分片。
- 【Redis】Redis的持久化方式
- Redis是一个开源的高性能键值存储系统,它通常将数据存储在内存中以提供快速的读写操作。然而,当Redis实例关闭时,内存中的数据将丢失。为了解决这个问题,Redis提供了持久化功能,允许将数据存储到...
- 【后端】微服务和分布式系统的区别
- 微服务和分布式系统是两种不同的概念,它们在软件架构和系统设计中扮演着不同的角色。以下是它之间的主要区别:1. 含义不同。微服务是一种架构风格,它将一个单一应用程序开发为一组小型服务,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。而分布式系统是若干独立计算机的集合,这些计算机对用户来说就像单个相关系统,即整个系统是由不同的计算机组成,而用户是无感知的,就像访问一台计算机一样。2. 概念层次不同。微
- 【后端】Elasticsearch简介
- 1、Elasticsearch介绍1.1、什么是ElasticsearchElasticsearch是一个开源的分布式搜索和分析引擎,构建在Apache Lucene搜索引擎库之上,提供了一个分布式、多租户的全文搜索引擎,能够实时地存储、检索和分析大规模的数据。1.2、Elasticsearch特点(1)分布式架构:Elasticsearch采用分布式架构(2)实时搜索(3)多租户支持:可以在同一个集群中为不同的应用或用户提供服务。(4)文档存储:以文档为基本存储单元,每个文档都是一个JSON格
- 【负载均衡】Nginx实现负载均衡的4种方式
- Nginx提供了多种方式实现负载均衡,以下是其中常用的4种方式:1.轮询(Round Robin): 这是默认的负载均衡算法,Nginx按照请求的顺序依次将请求分配给后端的服务器。每个服务器按照其权重来处理请求,然后按顺序循环分配。这种算法简单且平均地将负载分配给后端服务器,适用于后端服务器配置相同、处理能力相当的场景。
- 【Redis】Memcached和Redis的区别
- 一、Redis与Memcached的区别两者都是非关系型内存键值数据库,现在公司一般都是用Redis来实现缓存,为什么不用Memcached呢?接下来分析一下Redis、Memcached的区别:1、...