redis为什么可以做持久化;
大型公司对redis有重度依赖的,
先到redis再到数据库层,很多东西都放在缓存层;
数据库抗并发的能力远不如redis,会挂掉,
RDB快照持久化
在某个时刻将redis所有的数据存储到磁盘中;
怎么配置:redis默认的配置文件;redis.conf;
默认这三行
save 900 1 :900秒内写1次
save 300 10 :300秒内写10次
save 60 10000 :在60秒之内对redis的改动有1万次
以上所有其中一个满足那么,redis就会把所有文件保存到dump.rdb的文件中;
可以自主设置也在这个配置文件中:
dbfilename dump.rdb :表示默认文件名为dump.rdb
dir ./ 表示默认文件路劲是./;
这个文件中的数据是2进制文件;
触发save 900 1 是同步的操作,会阻塞客户端的redis的其他命令;
bgsave 则是异步的操作命令;
在redis客户端主动执行save命令可以执行保存到dump命令
执行这个命令是同步命令,
如果执行bgsave则是异步执行
在redis后台默认使用的是bgsave这个命令,最新刚刚执行的也会保存到dump文件中;
rdb存在的问题:还没触发rdb执行的时机,但是这个时候redis宕机了,这个时候这个期间的redis都会丢失掉;
aof持久化:
appendonly no
改成appendonly yes 开启aof
appendfilename “appendonly.aof”
策略
appendfsync always :所有命令都追加到AOF中 效率低
appendfsync everysec:1秒钟执行一次,一般默认也使用这个 性能和安全性都有兼顾
会丢一秒钟的数据
appendfsync no :从不执行
把所有数据做重放就恢复了所有文件
恢复速度非常慢
AOF重写
默认的配置
auto-aof-rewrite-percentage 100 下次重写超过这个数量级的100%则再次重写
auto-aof-rewrite-min-size 64mb:如果超过64mb就会重写aof去掉垃圾命令
一般情况下使用默认值即可;
可以通过客户端命令 bgrewriteaof重写AOF
如果两种方式都开启,那么两种持久化方式都会帮我们做;,
默认会使用AOF帮我们恢复数据
redis 4.0混合持久化毫不犹豫的使用这种方式
aof-use-rdb-preamble yes 开启混合持久化
混合持久化,必须开启aof,本质还是aof文件;
在aof重写的时候,不再是单纯将内存转换为resp命令,而是以快照的方式把数据存储到aof文件中;
其恢复速度快,又不会像原先快照模式一般丢失数据;
redis主从架构(跟我们是否开启rdb没有任何关系)
概念:为了减缓一台redis的压力,为redis再配置一台从节点,并且从节点只能读数据而不能写数据,这就是主从架构;
在从redis中配置 主redis 的端口和ip:replicaof 192.168.88.3 6379
1、psync命令同步数据,发送命令之前会跟主节点建立socket长连接;
2、收到psync命令执行bgsave生成最新rdb快照数据;
2.2、如果在生成rdb文件的时候又有新的数据生成,那么会做rdb之后新数据的缓存,其实就是一些写命令
3、把rdb数据送到从节点中去;
4、从节点清空数据,加载主节点rdb数据;
5、把缓存数据发回到从节点中;
6、执行缓存数据的写命令
7、持续把主节点的命令发到从节点中,根据socket长连接持续发送;
断开连接猴续传:
1、连接断开;
2、repl backlog buffer维护最近一段时间执行的命令的缓冲区(有限大小可以通过设置来修改)
3、启动从redis机的,与主redis机建立长连接
4、会把上次复制的偏移量(比如之前master写了10条数据,同步到第十条数据,当挂了之后再恢复),把10的偏移量发送给主节点;
5、去缓冲区里面找这个偏移量,如果找得到。那么将这个偏移量之后所有的命令一次性同步给从节点;
6、如果从节点挂的时间很长,丢失的数据很多,那么找不到偏移量,就会重新全量复制;
哨兵模式
概念:哨兵是特殊的redis服务,不提供redis的读写,他只会监控主从节点的状态,如果主节点断开,而多余一半的哨兵服务器感受到并且判断主节点已经宕机了,那么哨兵就会从从节点里面选举一个节点作为主节点使用;一般情况下哨兵都配置奇数台;
如何开放端口
1、开放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
firewall-cmd --reload # 配置立即生效
2、查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
3.、关闭防火墙
如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service
4、查看防火墙状态
firewall-cmd --state
5、查看监听的端口
netstat -lnpt