- 一、消息订阅
- 二、Redis持久化配置
- 1.RDB快照
- 2.AOF日志
- 3.两种持久化机制的比较
- 4.混合持久化
- 5.redis持久化相关的问题
- 三、Redis主从复制
- 1、集群的作用
- 2、主从通信过程
- 3、主从配置(配置两个从机)
- 四、配置文件详解
- 1、基本配置
- 2、主从配置
- 3、安全
- 4、限制
- 5、日志模式
看这里:https://blog.csdn.net/w15558056319/article/details/121490953
二、Redis持久化配置为了防止数据丢失以及服务重启时能够恢复数据,Redis支持数据的持久化,主要分为两种方式,分别是RDB和AOF,redis默认采用的是RDB的方式。
1.RDB快照RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。
RDB 优点:
- RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件;
- RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复;
- RDB 可以更大程度的提高 Redis 的运行速度,因为每次持久化时 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程并不会执行磁盘 I/O 等操作;
- 与 AOF 格式的文件相比,RDB 文件可以更快的重启。
RDB 缺点:
- 因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终止了,则会丢失一段时间内的 Redis 数据;
- RDB 需要经常 fork() 才能使用子进程将其持久化在磁盘上。如果数据集很大,fork() 可能很耗时,并且如果数据集很大且 CPU 性能不佳,则可能导致 Redis 停止为客户端服务几毫秒甚至一秒钟。
RDB的配置
Rdb快照的配置选项,在redis.windows.conf:
save 900 1 // 900内,有1条写入,则产生快照
save 300 1000 // 如果300秒内有1000次写入,则产生快照
save 60 10000 // 如果60秒内有10000次写入,则产生快照
(这3个选项都屏蔽,则rdb禁用)
和持久化相关的redis配置:
- stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入
- rdbcompression yes // 导出的rdb文件是否压缩
- Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性
- dbfilename dump.rdb //导出来的rdb文件名
- dir ./ //rdb的放置路径
AOF(Append Only File)中文是附加到文件,顾名思义 AOF 可以把 Redis 每个键值对操作都记录到文件(appendonly.aof)中。Redis 默认是关闭 AOF 持久化的。
AOF 优点:
- AOF 持久化保存的数据更加完整,AOF 提供了三种保存策略:每次操作保存、每秒钟保存一次、跟随系统的持久化策略保存,其中每秒保存一次,从数据的安全性和性能两方面考虑是一个不错的选择,也是 AOF 默认的策略,即使发生了意外情况,最多只会丢失 1s 钟的数据;
- AOF 采用的是命令追加的写入方式,所以不会出现文件损坏的问题,即使由于某些意外原因,导致了最后操作的持久化数据写入了一半,也可以通过 redis-check-aof 工具轻松的修复;
- AOF 持久化文件,非常容易理解和解析,它是把所有 Redis 键值操作命令,以文件的方式存入了磁盘。即使不小心使用
flushall
命令删除了所有键值信息,只要使用 AOF 文件,删除最后的flushall
命令,重启 Redis 即可恢复之前误删的数据。
AOF 缺点:
- 对于相同的数据集来说,AOF 文件要大于 RDB 文件;
- 在 Redis 负载比较高的情况下,RDB 比 AOF 性能更好;
- RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 更健壮。
Aof 的配置:
- appendonly no # 是否打开 aof日志功能
- appendfsync always # 每1个命令,都立即同步到aof.安全,速度慢
- appendfsync everysec # 折衷方案,每秒写1次
- appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof. 同步频率低,速度快。
- no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
- auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
- auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写
- RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 AOF 各种的优点,Redis 4.0 之后新增了混合持久化的方式。
- 在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式化追加的文件的末尾。
混合持久化优点:
- 混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,有减低了大量数据丢失的风险。
混合持久化缺点:
- AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件的可读性变得很差;
- 兼容性差,如果开启混合持久化,那么此混合持久化 AOF 文件,就不能用在 Redis 4.0 之前版本了。
1、在dump rdb过程中,aof如果停止同步,会不会丢失?
2、aof重写是指什么? 答:由于日志保存的是所有操作命令,导致存的日志会过大,而且数据库中有可能数据进行过删除,因此日志中的一些命令就相当于无效,因此日志先会删除,然后内存中的数据会逆化成命令,再重新写入到日志文件中,以解决 aof日志过大的问。
3、如果rdb文件,和aof文件都存在,优先用谁来恢复数据? 答: 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件完整。
4、恢复时rdb和aof哪个恢复的快 答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行
三、Redis主从复制 1、集群的作用- 主从备份----防止主机宕机
- 读写分离----分担master 的任务
- 任务分离----如从服分别分担备份工作与计算工作
第二种方案有一个好处:master宕机后,可以直接切换到slave1
2、主从通信过程步骤:
步骤一:进入redis目录,先复制两个redis.windows.conf
步骤二:修改主机配置文件(禁用rdb,打开aof)
步骤三:配置两个从服务器(一台启用rdb,两台禁用aof,设置slave-of)
6380端口
6381端口
步骤四:进入redis目录下cmd,启动三台服务器
redis-server redis.windows.conf 默认启动
redis-server redis.windows6380.conf
redis-server redis.windows6381.conf
步骤五:启动客户端,再5库插入一条数据 步骤六:退出客户端,登录80端口看是否存在
daemonize no 是否以后台进程(守护进程)启动
databases 16 创建database的数量(默认选中的是database 0)
port 6379 设置redis的端口号
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,
即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。
2、主从配置
slaveof 设为某台机器的从服务器,不用加引号
masterauth 连接主服务器的密码
slave-serve-stale-data yes # 当主从断开或正在复制中,从服务器是否应答
slave-read-only yes #从服务器只读
repl-ping-slave-period 10 #从ping主的时间间隔,秒为单位
repl-timeout 60 #主从超时时间(超时认为断线了),要比period大
slave-priority 100 #如果master不能再正常工作,
那么会在多个slave中,选择优先值最小的一个slave
提升为master,优先值为0表示不能提升为master。
repl-disable-tcp-nodelay no #主端是否合并数据,大块发送给slave
3、安全
requirepass foobared # 需要密码
#如果公共环境,可以重命名部分敏感命令 如config
通过【config set requirepass 密码】
来设置 的密码为临时密码,重启后失效
4、限制
maxclients 10000 #最大连接数
maxmemory #最大使用内存 200m
maxmemory-policy volatile-lru #内存到极限后的处理
volatile-lru -> LRU算法删除过期key
allkeys-lru -> LRU算法删除key(不区分过不过期)
volatile-random -> 随机删除过期key
allkeys-random -> 随机删除key(不区分过不过期)
volatile-ttl -> 删除快过期的key
noeviction -> 不删除,返回错误信息
5、日志模式
appendonly no #启用aof日志,yes启用
#读写频率
appendfsync no # 系统缓冲,统一写,速度快
appendfsync everysec #折衷,每秒写1次
appendfsync always # 每写一条,就存入aof日志中进行同步
no-appendfsync-on-rewrite no #为yes,则其他线程的数据放内存里,
合并写入(速度快,容易丢失的多)
auto-AOF-rewrite-percentage 100 #aof文件增长比例,
指当前aof文件比上次重写的增长比例大小。
aof重写即在aof文件在一定大小之后,
重新将整个内存写到aof文件当中,
以反映最新的状态(相当于bgsave)。
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小