Redis主从复制
一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:
1.单台Redis服务器会发生单点故障,且负载压力较大;2.单台Redis服务器容量有限。一般可以用Redis主从复制或者Redis集群解决这个问题,本文只讨论Redis主从复制
主从复制优点
- 提高服务器的负载能力,可根据读请求的规模自由增加或者减少从库数量
- 数据多重备份
ps: 在Redis主从模式中,一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库
主从复制原理
当一个从数据库启动时,会向主数据库发送SYNC
命令,主数据库收到命令后会开始在后台保存快照(即RDB持久化),并将保存快照期间接收的命令缓存起来。当快照完成时,Redis将快照文件和缓存文件命令发给从数据库,从数据库载入快照文件并执行缓存命令。以上过程称为复制初始化。复制初始化结束之后,主数据库每收到写命令就会将命令同步给从数据库,从而保证主从数据一致,这一过程称为复制同步阶段。
主从复制配置
- 只需在从数据库的配置文件中,加上如下命令:
slaveof 主数据库地址 主数据库端口
- 如果主数据库需要密码登陆时,还需加上:
asterauth password
- 可通过如下命令查看当前实例在复制系统中的相关信息:
info replication
- 默认情况下,从库只能读取数据,不能写入数据,但是可以在从库的配置文件中加上如下配置项允许从库写数据:
slave-read-only no
- 要想断开当前数据库与主库的连接,并且和新数据库进行同步,只需在客户端执行以下命令即可:
slaveof 新主库地址 新主库端口
- 想停止接收其他数据库的同步,将当前数据库升级为主库,只需在客户端执行:
slaveof no one
- 当主数据库写完数据,准备同步到从服务器时,从服务器断掉与主服务器的连接,为了保证数据的一致性,可通过配置以下参数,限制当前只有n或者n个以上的从服务器连接到主库,主数据库才可写:
min-slaves-to-write
Redis分区
分区概念
分区是将数据分割到不同的Redis实例的过程,每个Redis实例只包含所有key的一部分(子集)。
分区优点
- 数据存储更有规律
- 整合了多个服务器的存储空间、计算能力、网络带宽等
分区缺点
- 不能操作存储在不同实例的key,比如无法匹配存储在两个不同实例的集合的交集
- Redis事务涉及到多个键不能使用
- 分区使得数据处理更复杂,比如备份数据需要备份每个实例服务器上的所有数据
- 增加或删除容量比较复杂
分区类型(分区规则)
- 范围分区,将一定范围内的对象映射到特定的Redis实例
- 哈希分区,根据HASH算法,均匀的将数据映射到不同的实例
分区的实现
- 通过代码层实现算法,手动将对象分配到特定的实例
- 通过某些具有分区功能的客户端,由客户端直接选择正确的节点,将
key
存到相应实例中 - client将请求发送到代理,由代理分配节点,存储key到实例中