redis进阶
redis进阶之数据持久化
| RDB | AOF | |
|---|---|---|
| 持久化方式 | 定时对整个内存做快照 | 记录每一次执行的命令 |
| 数据完整性 | 不完整,两次备份之间会丢失 | 相对完整,取决于刷盘策略 |
| 文件大小 | 会有压缩,文件体积小 | 记录命令,文件体积大 |
| 宕机恢复速度 | 很快 | 慢 |
| 数据恢复优先级 | 低,因为数据完整性不如AOF | 高 |
| 系统占用资源 | 高,大量cpu和内存 | 低,主要是磁盘IO资源 |
| 使用场景 | 追求更快启动速度,接收数分钟的数据丢失 | 数据安全要求高 |
RDB持久化
RDB 称为Redis数据快照,通过将内存数据记录到磁盘中,以此达到备份
- RDB命令有两种
- save 由redis主进程执行,会阻塞其他命令
- bgsave 开启子线程执行,避免主进程受到影响
Redis内部redis.conf文件有触发RDB的机制,格式如: save 900 1 ,表示当900秒内至少有 1 个key被修改就执行bgsave
AOF持久化
Redis处理的每一个写命令都会记录在AOF文件中,相当于写命令的日志文件。
AOF默认是关闭的,需要修改redis.conf文件来开启AOF : appendonly yes
- AOF 记录写命令由三种模式
- appendfsync always :每执行一次写操作立即记录到AOF文件中
- appendfsync everysec : 每隔一秒 记录一次
- appendfsync no : 由操作系统决定记录
redis主从集群
由于一个redis的并发能力是有限的,主从集群可以提高redis的并发能力。
主从集群的特点:
| IP | PORT | 角色 |
|---|---|---|
| 192.168.150.101 | 7001 | master |
| 192.168.150.101 | 7002 | slave |
| 192.168.150.101 | 7003 | slave |
- 现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
有临时和永久两种模式:
修改配置文件(永久生效)
- 在redis.conf中添加一行配置:
slaveof <masterip> <masterport>
- 在redis.conf中添加一行配置:
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
1
slaveof <masterip> <masterport>
- 开启主从
1 | |
1 | |
- 然后连接 7001节点,查看集群状态:
1 | |
设置主从后,就会默认只有主节点可以进行写操作,从节点只能读操作
主从数据同步原理
建立主从关系后会自动开启数据同步,这里介绍数据同步的原理
数据同步分为两种:
- 全量同步
全量同步发生在从节点第一次连接到主节点,从节点会向主节点发送一个请求(请求包含replid和offset),所以主节点先会将一个数据版本信息发送给从节点(数据版本信息用来判断是否是第一次连接),接着主节点会执行 bgsave 生成RDB文件并发送给从节点,从节点执行RDB文件后,数据基本与主节点一致。为什么是基本?因为bgsave是异步执行的,所以在执行过程中也会有写操作,redis会将这段时间内的写操作 记录到repl_baklog(缓冲池)中并发送给从节点,从节点在执行这里面的命令即可达到数据同步- Replication id :简称replid,是数据集的标记,id一致说明是同一数据集。每个主节点master都由唯一的replid,slave会继承master的replid
- offset:偏移量,随着记录在repl_baklog中的数据增多,slave完成同步时也会记录当前同步的offset,如果slave的offset小于master的offset,说明slave的数据需要更新

- -
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Little Monste'Blog!
评论









