初识 Redis(四):Redis 主从复制与分区
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 到实例中
来源: http://www.jianshu.com/p/94446ea88894