1、事务本质
- 事务的本质是保证数据的一致性
- Redis支持事务(弱事务),基于队列实现
- 创建一个事务队列
- 将事务操作都放入队列中
- 依次执行
- 事务处理机制
- 手动或复合配置条件时触发,对此刻内存中的数据进行快照并保存在磁盘中,生成一个经过压缩的二进制文件,后缀名.rdb
- 配置条件如下: ```shell save “” # 不使用RDB存储 不能主从
save 3600 1 #表示3600秒内至少1个键被更改则进行快照。 save 300 100 #表示300秒内至少100个键被更改则进行快照。 save 60 10000 #表示60秒内至少10000个键被更改则进行快照。
进入redis客户端
bin/redis-cli
同步执行,阻塞redis服务线程直到保存完毕
save
异步执行,fork一个和主线程一致的子线程操作RDB文件,非阻塞
bgsave
**bgsave执行原理:**
1. bgsave ---> redis服务进程 ----> 判断是否存在执行save或bgsave子进程
- 存在: 直接返回
- 不存在: 阻塞时创建子线程
- 取消阻塞,可以响应其他命令
- 生成RDB文件
**优缺点:**
- 优点
- 基于二进制文件完成备份,占用空间少,便于文件传输
- 自定义规则,数据备份时间灵活
- 缺点
- 宕机后最后一次快照后的数据会丢失,无法保证数据完整
- 即使使用bgsave,创建子线程时仍会阻塞Redis服务进程,频繁执行影响系统吞吐率
<a name="YalSy"></a>
### AOF**(append only file)**
1. 保存Redis所有写操作到AOF文件
1. 执行原理:
1. 客户端发送写命令
1. redis将写命令保存至缓冲区文件末尾 aof_buf (命令追加)
1. 写入AOF文件 (文件写入)
1. 根据策略向磁盘同步 (文件同步)
- always 每次写入都会将aof_buf缓冲区文件写入AOF文件中并同步到磁盘, 安全性最高 效率最低
- everysec 每次写入都会将aof_buf缓冲区文件写入AOF文件中,每隔一秒同步到磁盘 安全性中 效率中
- no 每次写入都会将aof_buf缓冲区文件写入AOF文件中, 同步操作交由系统执行(默认30秒一次) 安全性最低 效率最高
3. AOF重写优化
```shell
#当前aof文件大小超过上一次aof文件大小的百分之多少时进行重写。如果之前没有重写过,以
启动时aof文件大小为准
auto-aof-rewrite-percentage 100
#限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb
3、两种持久化机制对比
- RDB默认开启,AOF需手动开启。
- RDB性能优于AOF.
- AOF安全性优于RDB.
- AOF优先级高于RDB(混合模式).
- RDB存储某个时刻的数据快,AOF存储写命令.
- RDB在配置触发状态会丢失最后一次快照以后更改的所有数据,AOF默认使用everysec,每秒保存一次,最多丢失两秒以内的数据.
4、高可用-主从复制的原理
通过新搭建子服务器 同步复制主服务器数据完成数据备份容灾
主从复制步骤:
- Slave服务启动,主动连接Master,并发送SYNC命令,请求初始化同步.
- Master收到SYNC命令后,执行BGSAVE命令生成RDB文件,并缓存该时间段内的写命令.
- Master完成RDB文件后,将其发送给所有Slave服务器
- Slave服务器收到RDB文件后删除内存中旧的缓存数据,并装载RDB文件
- Master在发送完RDB文件后,立即向所有Slave服务器发送缓存中的写命令
主从复制的作用:
- 读写分离 : 主写从读, 提高服务器读写负载能力
- 负载均衡: 基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
- 故障恢复: master挂掉后 slave可以继续提供服务,实现快速故障恢复
- 数据冗余: 数据热备份 , 是持久化之外的一种数据冗余模式
- 高可用基石: 基于主从复制, 构建哨兵模式与集群, 实现Redis高可用方案
5、主从存在问题