RocketMQ思维导图,不看会后悔哟
Mysql思维导图分享
上面思维导图可去gongzhonghao回复:扣扣号,获取联系方式后找我免费获得可编辑版本。 后面会继续分享其他思维导图,包括Redis、JVM、并发编程、RocketMQ、RabbtiMQ、Kafka、spring、Zookeeper、Dubbo等等 |
RDB就是将某一时刻的内存数据快照 以二进制形式写到磁盘里。
由于RDB⽂件是保存在硬盘上的,所以即使Redis崩溃或者退出,只要RDB⽂件存在,就可以⽤它来恢复还原数据库的状态。它利用了系统的COW(copy on write)机制。
触发RDB的持久化有两种方式:手动触发和自动触发
1. 手动触发
调用save命令:会阻塞当前Redis服务器直到RDB文件创建完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境非必要不要使用。
调用bgsave命令:通过执行fork操作创建一个子进程来进行持久化 ,减少了父进程的阻塞。但是在fork阶段也会阻塞父进程(时间很短)。
2. 自动触发
在redis.conf中配置“save m n”。表示当m秒内数据有n次变化时就会自动触发bgsave
从节点执行全量复制操作时,主节点自动执行bgsave生成RDB文件并发送给从节点
执行debug reload命令重新加载Redis时,也会自动触发save操作
执行shutdown命令时,如果没有开启AOF则自动执行bgsave
RDB的优点是体积小,恢复数据快。缺点是生成二进文件更耗性能,且是间隔保存,丢失数据风险更大
AOF以独立日志的方式记录每条写和修改命令, 重启时再重新执行AOF文件中的命令达到恢复数据的目的。
AOF可设置为总是保存,但是一般都是设置1秒保存一次。我们生产时就是这样设置的,运维给出的建议是,不要希望redis作数据的一致性保证,它只为了解决高并发的问题的,一致性通过好的架构设计去保证。
命令追加到aof_buf(缓冲区)中。
aof_buf(缓冲区)根据设置的刷盘策略向磁盘同步。
文件变大后对AOF文件进行重写,以减少文件体积。
redis服务器重启时,加载AOF文件进行数据恢复。
appendfsync always:每次写入都进行刷盘操作,对性能影响最大,占用磁盘 IO 较高,数据安全性最高
appendfsync everysec:1秒刷一次盘,对性能影响相对较小
appendfsync no:写入aof_buf后不刷盘,由操作系统的定时机制进行刷盘。对性能影响最小,数据安全性低
1. 手动触发
直接调用 bgrewriteaof命令
2. 自动触发,满足以下两个条件
auto-aof-rewrite-min-size:AOF 文件体积最小多大以上触发
auto-aof-rewrite-percentage:AOF 文件距离上次文件增长超过多少百分比 = 当前AOF大小 / 上次重写时AOF的大小
优点 是数据更完整。缺点 文件体积大,加载慢,磁盘IO高。