一文读懂Redis的四种模式(上)

1035次阅读  |  发布于3年以前

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。[2]在2013年5月之前,其开发由VMware赞助。[3][4]根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。----来自于维基百科

特点

1、支持持久化,在实例重启的时候,可以将持久化的数据重新加载到内存中,提供服务

2、key-value型数据库,支持string、hash、set、zset等复杂的数据结构

3、数据备份,支持读写分离

4、高性能,Redis能读的速度是110000次/s,写的速度是81000次/s

5、原子性,由于其内部是单线程操作,所以所有的操作都是原子操作

6、丰富特性,支持publish、subscribe以及key过期等

模式

01单机模式

单实例部署,没有备用节点进行数据同步,不支持持久化和 备份策略,适用于对可靠性要求不高的业务场景。

优点:

1、架构简单,部署方便

2、高性价比

3、高性能

缺点:

1、不保证数据可靠性

2、当进程重启后,数据丢失

3、性能受限于CPU处理能力(读写均在该实例上)

02主从模式

Redis还有一种模式,就是主从模式,相对于单机模式而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,可以实现同时对外提供服务和读写分离策略。

其主要用于数据量小的场景,即key数量较小或者单机内存远远大于场景需要,master支持读和写,而slave只支持读。为了应对大流量请求的情况,实现读写分离的功能,即即使master可以支持读和写,但是一般情况下,根据业务场景,可以将写操作只作用于master,而所有的读操作,均在slave上,根据同步策略,master与slave会定期进行数据同步。

优点:

1、解决数据备份的问题,做到安全可靠,不丢数据(此处只是相对,因为某些特殊的情况下,数据还是有可能会丢失)

2、支持主从分离,提高服务器性能

缺点:

1、如果master挂掉,需要人工介入(相比slave节点,因为主节点只有一个,如果挂掉了,那么该集群则无法提供服务,相反,如果某一个slave挂了,client端可以通过其他方式,只访问其他几个slave)

2、无法做到动态扩容

3、支持大数据量操作

03 Sentinel模式

为了解决上面主从模式存在的问题,从redis2.8之后,就引入了Sentinel(哨兵)模式,Sentinel从其字面意思来理解,就是一个监控,用来监控整个集群的可用性,并在集群出现问题的时候,不需要人工干预,即可实现自动恢复。

Sentinel本身也是一个分布式系统,这样做是为了保持Sentinel集群本身的可用性,其主要使用Gossip 协议进行内部通讯,并使用投票协议来决定是否进行故障转移,以及是否将某个slave提升为master。

Sentinel进程的作用:

1、监控:哨兵会不断的检查Master和Slave是否正常操作

2、提醒:当被监控的某个Redis节点出现问题时候,哨兵可以通过API向管理员或者其他应用程序发送通知

3、自动故障迁移

优点:

1、高可用,解决主从模式下的高可用问题

2、支持线性扩展,图片redis本身单线程的限制

3、满足大容量或者高性能需求

缺点:

1、部署较主从模式复杂

2、资源浪费,slave节点只作为备份节点,不提供服务(如果要实现该功能,需要client实现)

3、不支持读写分离

4、不支持动态扩容

总之,Sentinel在一定的时间内,基本上满足了用户的需求,但是如果数据量越来越大,因为其不支持动态扩容,这就使得越来越迫切的需要解决这个问题,这就出现了Cluster模式,即集群模式。

04 Cluster模式

将在下一节作为重点,详细讲解

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8