redis持久化

1.基本概述

办到持久化其实就是Redis将数据写入磁盘内。

主要有四种:

  • RDB (Redis Database):RDB持久化以指定的时间间隔执行数据集的时间点快照。
  • AOF(Append Only File):AOF持久性记录服务器接收到的每个写操作。然后,这些操作可以在服务器启动时再次重播,重建原始数据集。命令使用与Redis协议本身相同的格式进行记录。
  • RDB+ AOF:混合使用AOF和RDB。
  • 禁用持久性:禁用持久性。这有时在缓存时使用。

大致如下:

2.RDB

RDB (Redis Database):RDB持久化以指定的时间间隔执行数据集的时间点快照。

类似vm虚拟机拍摄的快照(snapshots)。将快照文件就称为RDB文件(dump.rdb),存储进磁盘。恢复时再将硬盘快照文件直接读回到内存里。

默认情况

redis6.0.16以下

目录结构如下:

编辑配置文件

vim redis.conf

其对RDB配置如下:

在Redis.conf配置文件中的SNAPSHOTTING下配置save参数。

“save m n” :表示m秒内数据集存在n次修改时, 自动触发bg

  • save 900 1:每隔900s,超过1个key变化,就生成RDB文件。
  • save 300 10: 每隔 300s,超过 10个key 变化,就生成RDB文件。
  • save 60 10000:每隔60s,超过10000个key变化,就生成RDB文件。

redis6.2以上

目录结构如下:

编辑配置文件

vim redis.conf

其对RDB配置如下:

默认情况下Redis将保存DB情况如下:

  • 如果至少执行了一次更改,则在3600秒(一小时)后保存;
  • 如果至少执行了100次更改,则在300秒(5分钟)后保存;
  • 如果至少执行了10000次更改,则在60秒后保存

使用方法

自动触发

格式:

save <seconds> <changes> [<seconds> <changes> ...]

编辑配置文件

vim redis.conf

10秒改动两次触发

默认dump文件保存路径

修改如下,注意目录应事先存在,否则会报找不到该目录错误:

默认dump文件保存名字

考虑到多台实例,建议后加端口号命名

bgsave命令执行失败了,是否要停止写入。如果配置成no,在快照写入失败时,也能确保redis继续接受新的写请求,默认为yes最好。

对于存储到磁盘中的快照,是否进行压缩存储。采用LZF算法进行压缩。默认开启

redis使用CRC64算法来进行数据校验,但会增加大约10%的性能消耗。默认开启

在没有持久性的情况下删除复制中使用的RDB文件启用。默认禁用。

改完后,重启,redis-server后接的是我的配置文件所在,默认redis目录下的redis.conf

redis-server /myredis/redis7.conf

登入

redis-cli -a 123456 -p 6379

10秒内设置以下键值

切换到dump文件保存路径

cd /myredis/dumpfiles/

redis每次启动时,会自动读取dump文件保存路径下的dump文件保存名字,如这里就是读取dump6379.rdb。

所以当你需要对其备份是将该文件复制一份到其他地方即可,以防被覆盖。

手动触发

每当Redis需要将数据集转储到磁盘时,会发生以下情况:

  • 就有了一个子进程和一个父进程。
  • 子进程开始将数据集写入临时RDB文件。
  • 当子进程写完新的RDB文件后,它会替换旧的RDB文件。

手动触发可以使用SAVE或BGSAVE命令。

save

save执行会阻塞当前redis服务器,直到持久化工作完成,所以一般使用bgsave.

使用bgsave命令,Redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。

bgsave

查看上一次成功执行快照的时间,返回一个时间戳

lastsave

在linux使用date命令@后接时间戳,可以查看具体时间

date -d @1700637292

触发条件

  • 配置文件中默认的快照配置
  • 执行save/bgsave命令
  • 执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
  • 执行shutdown且没有设置开启AOF持久化
  • 主从复制时,主节点自动触发

修复dump文件

如果正在备份时,突然非正常退出,那么可能会导致dump文件破损

修复命令,后接的是dump文件地址

redis-check-rdb /myredis/dumpfiles/dump6379.rdb

禁用RDB

修改在配置文件redis.conf,用一个空字符串参数完全禁用,

将注释删掉即可

优缺点

  • 定时备份
  • RDB 文件在内存中的加载速度要比 AOF 快得多
  • 依赖主进程的fork,可能会导致服务请求的瞬间延迟。
  • 非正常关闭,可能会丢失。

 

3.AOF

基本概述

AOF(Append Only File):AOF持久性记录服务器接收到的每个写操作。然后,这些操作可以在服务器启动时再次重播,重建原始数据集。命令使用与Redis协议本身相同的格式进行记录。

AOF会以日志的形式来记录每一次写操作。当然读操作不记录。而redis启动时,会根据这些文件重新执行来恢复数据。

AOF保存的文件是appendonly.aof文件

工作流程如下:

  • AOF缓冲区在内存中,达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
  • AOF内容的增多会导致文件膨胀,AOF重写起到AOF文件压缩的目的。

写回策略:

  • Always:同步写回,立刻同步将日志写入磁盘。但对性能影响较大。
  • everysec :每秒写回,每个写命令执行完,先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入磁盘。可能丢失一秒数据。
  • no :操作系统控制的写回,每个写命令执行完,先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。可能丢失较多数据。

在配置文件如redis.conf中配置

配置方法

AOF配置开启,在配置文件如redis.conf中配置

默认是no即关闭AOF

写回策略。默认每秒写回

redis7默认保存路径配置,如下配置:

  • redis6中:RDB会保存为/myredis/dirfiles/dump.rdb,AOF保存为/myredis/dirfiles/appendonly.aof
  • redis7中:RDB会保存为/myredis/dirfiles/dump.rdb,AOF保存为/myredis/dirfiles/appendonlydir/appendonly.aof

AOF保存文件命名:

redis6中:直接叫appendfilename中配置的值默认appendonly.aof

redis7中采用Multi Part AOF(多部分)实现:

  • base(基本):表示基础AOF,它一般由子进程通过重写产生,该文件最多只有一个。
  • incr(增量):表示增量AOF,它一般会在AOFRW开始执行时被创建,该文件可能存在多个。(写操作一般记录在incr)
  • manifest (清单):跟踪、管理这些AOF。

如下图所示:

写操作命令一般记录在incr增量文件,大致结构如下:

vim appendonly.aof.1.incr.aof

此外还有HISTORY文件表示历史AOF,每次AOFRW成功完成时,本次AOFRW之前对应的BASE和INCR AOF都将变为HISTORY, HISTORY类型的AOF会被Redis自动删除。

以上所有文件会保存到

大致如下:

redis启动会重新加载AOF文件,将写操作命令重新执行,以达到持久化。

如果误执行了清空操作,要恢复时,只要将appendonly.aof.1.incr.aof中错误执行的命令删除即可。

AOF重写期间是否同步

重写机制

写命令不断记录,当AOF文件的大小超过所设定的峰值时, Redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

比如:

set k1 v1
set k1 v2
set k1 v3

本来最后一条指令就会覆盖前面,所以就只会保存最后一条指令。

自动触发

在配置文件如redis.conf中配置

默认配置是上次重写后的aof大小,增长了100%,且要大于64M才会自动触发。

我们把改成1k,同时将混合使用RDB和AOF的配置关闭,避免干扰 

 

当文件小于1k时,如图存在许多重复命令

appendonly.aof.1.incr.aof

当文件大于1k时,来看效果:

注意看数据从incr文件迁移到base文件,同时incr文件和base文件序号加一。

可以看到重复命令也没了。

vim appendonly.aof.2.base.aof

手动触发

如果不满足配置文件的条件

也可以手动触发,执行以下命令

bgrewriteaof

修复文件

如果正在备份时,突然非正常退出,那么可能会导致AOF文件破损

修复命令,后接的是AOF文件地址

redis-check-aof --fix /myredis/dirfiles/appendonlydir/appendonly.aof.1.incr.aof

优缺点

  • 更好保证数据不丢失,配置everysec最差保证只丢失一秒数据
  • RDB效率会高于AOF
  • 相同数据,AOF文件体积会大于RDB文件

 

 

4.混合使用RDB和AOF

默认开启混合

如果混合使用RDB和AOF配置关闭。

AOF是默认关闭的。如果开启,AOF优先级高于RDB.

注意:

在同时开启RDB和AOF持久化时,重启时只会加载AOF文件,不会加载RDB文件。如果没有开启AOF就使用RDB文件。

所以一般RDB文件用于备份数据库。

如果混合使用RDB和AOF配置开启

先使用RDB存储一个快照文件,然后使用AOF文件记录所有的写操作,当重写策略满足或手动触发重写的时候,再记录一次新的RDB记录。而重启redis服务时,会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。

混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。

AOF包括了RDB头部+AOF混写

5.纯缓存模式

要达到最高性能,就采用纯缓存模式。使用纯缓存模式只要关闭RDB和AOF即可。

修改在配置文件redis.conf,用一个空字符串参数完全禁用,

将注释删掉即可

在配置文件如redis.conf中配置no即关闭AOF

注意:

AOF和RDB关闭后,save命令和bgsave命令以及bgrewriteaof依旧可以使用,即只是关闭了自动触发。

参考

Redis persistence | Redis

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇