前言
Redis是一个内存数据库,如果没有配置持久化,在Redis重启后,数据就会全部丢失,因此开启Redis的持久化功能,
将数据保存在磁盘上,当Redis重启后,可以从磁盘中获取数据。
一、Redis如何实现持久化?
Redis主要有两种持久化方式,一种是RDB(快照),一种是AOF
二、RDB和AOF的区别和配置
1.RDB
在指定的时间间隔内将内存中的数据集快照写入磁盘,默认文件名为:dump.rdb
RDB在redis.conf配置文件中进行配置,命令格式为:save [时间间隔] [次数]
产生快照的情况:
1.save:手动在命令行上执行
会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,知道RDB快照完成为止
2.bgsave:手动在命令行上执行
fork创建子进程,RDB持久化过程由子进程负责,会在后台异步进行快照,快照同事还可以响应客户端请求
3.自动化:配置文件完成,配置触发Redis的RDB持久化条件
save m n 表示m秒内数据集存在n次变动,自动触发bgsave
4.主从架构:从节点同步数据时,会发送sync执行同步操作,主节点就会执行bgsave
优点:
RDB文件紧凑,全局备份,适合进行备份和灾难性恢复
在恢复大数据集时的速度比AOF的恢复速度快,生成的事一个紧凑压缩的二进制文件
dbfilename wnn.rdb
dir /usr/local/redis/data
save 10 2
save 100 5
2.AOF
append only file :追加文件的方式,文件容易被读懂
优点:
以独立日志的方式记录每次redis的操作命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的
写入过程中如果出现宕机,也不影响之前的数据,可以通过redis-check-aof检查修复问题
核心原理:
Redis每次写入命令会追加到aof_buf(缓冲区)
AOF缓冲区会根据对应的策略想硬盘做同步操作
AOF提供了3种同步方式,在性能和安全性方面做出平衡
1. appendfsync always:每次有数据修改发生时都会写入AOF文件,消耗性能,安全
2. appendfsync everysec:每秒钟同步一次,该策略为AOF的缺省策略,故障时只能丢失1秒钟的数据
3. appendfsync no:不主从同步,由操作系统自动刷盘,性能好,不安全
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
3.AOF重写
AOF文件越来越大,需要定期对AOF文件进行重写压缩
旧的AOF文件含有无效命令会被忽略,保留最新的数据命令
多条写命令可以合并为1个,更小的AOF文件更容易被redis加载
重写触发配置:
1.手动触发:直接调用bgrewriteaof命令,使用一个子进程进行重写,不会对redis的正常指令有影响
2.自动触发:
auto-aof-rewrite-min-size 100
auto-aof-rewrite-percentage 64M
4.RDBheAOF混合使用
在redis启动的时候如果既配置RDB又配置AOF,则优先使用AOF,因为AOF更加安全,但是性能不太好,
但是可以混合使用,达到更好的效果
RDB和AOF混合使用,先根据RDB'快照恢复到最后一次记录,在通过AOF进行恢复
配置开启混合使用:
aof-use-rdb-preamble yes
三、Redis主从架构
Redis的主从架构模式其实就是用一个redis节点来做写操作(主节点),多个redis节点来做读操作(从节点),
主节点会将写入的数据同步给从写点,以保证从从节点读取的数据是最新的数据
搭建方式:
主节点不用修改任何配置,从节点修改redis.conf配置文件
配置从节点配置文件里主节点的ip端口:replicaof(代表从节点从哪个主节点同步数据)
replicaof 192.168.1.11 6379
四、Redis哨兵架构
哨兵架构是在主从架构上衍生出来的,因为主从架构中的主节点一旦挂了,那么久不能再写入数据了,只能从
从节点中读取数据。所以就弄了一个哨兵集群来监视这些节点,当主节点挂了以后,哨兵选举一个从节点变成
主节点,并让写数据的命令得以继续执行。
搭建方式:
复制一份sentinel.conf文件进行修改,redis配置目录中默认有这个文件
修改端口号,以及sentinel命令,格式为:sentinel monitor [主节点名称] [端口] quorum
注:quorum是一个数字类型,意思是有多少个sentinel认为这个主节点失效才算真的失效,比如配置了
5个sentinel,那么这里3的含义就是如果有3个sentinel认为主节点失效才算失效
sentinel monitor master 192.168.1.11 6379 3