目录
1、什么是持久化?
2、Redis实现持久化的方式
3、RDB(Redis DataBase)快照模式
3.1 手动触发
3.1.1 save
3.1.2 bgsave
3.2 自动触发
4、AOF(append only File)日志追加模式
4.1 开启aof
4.2 RBD和AOF的区别
5、Redis的集群模式
5.1 主从模式
5.1.1 主从关系图解
5.1.2 主从关系搭建
5.2 哨兵模式
5.2.1 监控的功能
5.2.2 选举的机制
5.2.3 哨兵模式搭建
5.3 去中心化模式
5.3.1 去中心化模式图解
5.3.2 去中心化模式搭建
1、什么是持久化?
持久化就是把内存中的数据存储到磁盘的过程。同时也可以把磁盘中的数据加载到内存中。将数据存储在磁盘中,哪怕Redis宕机也不会丢失数据(未来就会涉及到序列化问题)
2、Redis实现持久化的方式
Redis可以通过快照模式RDB或日志追加模式AOF实现持久化
3、RDB(Redis DataBase)快照模式
每隔一段时间,对内存中的数据进行快照存储。默认启用该模式
触发方式分为两种,分别是手动触发和自动触发。
3.1 手动触发
通过save和bgsave命令,可以手动触发rdb。配置文件的保存名字默认为dump.rdb
3.1.1 save
save命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
3.1.2 bgsave
执行时,Redis会在后台异步进行快照操作,快照时,同时可以响应客户端请求。bgsave在执行该命令时会fork出一个新的线程,单独执行rdb持久化操作,而不影响其他客户对redis服务的操作,是Redis中唯一使用多线程的地方。具体流程如下:
3.2 自动触发
通过配置文件来设置自动触发。在redis.conf中,搜索save(大概四百多行)。
save 10 5 20 10 ——10秒内改变5次或者20秒内改变10次就会自动保存。
save 10 5 ——10秒内改变5次就会自动保存。
4、AOF(append only File)日志追加模式
AOF[append only file]: 日志[每执行一个写操作]追加模式,默认redis没有开启该模式。需要手动开启。默认的文件名appendonly.aof
4.1 开启aof
把配置文件中的appendonly yes即可
当启动redis服务器,会把日志文件中的命令从上到下执行一下。
4.2 RBD和AOF的区别
RDB快照模式,数据备份和恢复速度快。缺点: 数据完整性差。数据可能丢失多。
AOF日志追加: 数据完整性高。 缺点: 数据备份呵呵恢复速度慢。
5、Redis的集群模式
redis提供了三种集群模式.
第一种: 主从模式。版本3以下
第二种: 哨兵模式 版本5以下
第三种: 去中心化模式 版本5以上
5.1 主从模式
redis主从模式表示一个主节点跟若干个从节点。 主节点可以负责写操作和读操作。而从节点只负责读操作。主节点的数据会自动同步到所有的从节点上。
5.1.1 主从关系图解
5.1.2 主从关系搭建
1、修改配置文件
- 端口号
- dump文件的名称
- aof的文件名
2、开启三台Redis服务
- redis-server redisXXX.conf
- 配置文件
3、配置主从关系
- 配从不配主 info replication查看主从关系
- 语法:laveof 主节点IP 主节点端口号
- 结果图
4、注意:
- master宕机后,slave不会自动选择老大
- 如果某台slave宕机,恢复后会具有master具有的数据
- 主从的缺点:不会自动选举master节点,导致一旦主节点宕机,就无法进行写操作。
5.2 哨兵模式
5.2.1 监控的功能
sentinel基于心跳机制监测服务,每隔1秒向集群的每个实例发送ping命令
- 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线
- 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最后超过sentinel实例数量的一半。
图示:
5.2.2 选举的机制
一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据如下:
- 首先判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds*10)则会排除该slave节点。
- 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举。
- 如果slave-priority值一样,则判断slave节点的offset值,越大说明数据越新,优先级越高。
- 最后是判断slave节点的运行id大小,越小优先级越高。
5.2.3 哨兵模式搭建
1、修改配置文件sentinel.conf
2、启动哨兵服务
redis-sentinel sentinel.conf
5.3 去中心化模式
去中心化至少三主三从,否则搭建不起来,如下图所示
5.3.1 去中心化模式图解
redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。
5.3.2 去中心化模式搭建
准备三主三从:
1. 修改端口
2. dump文件名
3. aof文件名
4. aof目录名
5. 开启集群模式cluster-enabled yes
6. cluster-config-file nodes-7001.conf
1、启动Redis
2、分配槽以及主从关系
分槽,以及设置主从关系。 副本
redis-cli --cluster create --cluster-replicas 1 192.168.111.188:7001192.168.111.188:7002
192.168.111.188:7003
192.168.111.188:7004
192.168.111.188:7005
192.168.111.188:7006
3、命令行的客户端
redis-cli -c -h IP地址 -p 端口号