redis持久化:把内存的数据存放到磁盘,避免因为断电等导致数据丢失。
RDB(Redis Database)
rdb就是在一定时间间隔内把当时的数据和状态保存为 .rdb文件放在磁盘中。
自动触发设置:在redis.conf
修改.rdb文件的保存位置:
可以在redis中使用config get dir命令获取.rdb的保存位置
手动触发:SAVE(不要用)和BGSAVE(默认)命令
SAVE:会中断redis的其他功能,当持久化操作完成后再重新启用。
BGSAVE:在后台异步进行保存操作,会fork一个子进程由它来执行持久化操作。
lastsave:获取上一次持久化操作成功的时间戳
修复破损的rdb文件:在set操作时value读到一半时redis死掉了,数据会出错从而可能导致整个rdb都坏了。
执行命令: redis-check-rdb /(路径)/dump.rdb(可能破损的rdb文件)
禁用rdb:
1.在配置文件中删除save
2.动态禁用:redis-cli config set save ""
AOF(Append Only File)
aof:以日志形式记录每个写操作,对于该日志文件只允许追加不允许改写。redis启动时重新读该文件,将使用写操作重新执行一遍。
默认情况下,redis没有开启aof。
开启aof:修改配置文件:appendonly yes。
redis与aof文件间有个aof缓冲区,它会控制什么时候把写操作记录到aof文件,避免频繁的磁盘io。
为了防止aof文件膨胀,会进行aof重写,把一些命令合并,压缩文件。
写回策略:可以到配置文件中修改:appendfsync everysec
1、always:同步写回,写一个记一个,频繁io。
2、everysec(默认):每秒将aof缓冲区的内容写到磁盘。
3、no:每次命令都写到aof缓冲区,由操作系统决定何时将缓冲区写到磁盘。
aof 在 配置文件 的内容:
开启:appendonly yes
写回策略:appendfsync everysec
aof文件保存位置:redis6及以前:与rdb相同,都是配置文件的 dir 配置
redis7之后:appenddirname "appendonlydir",如果dir为 /myredis ,
那么最后aof文件会在 /myredis/appendonlydir/ 下。
aof文件保存名称:redis6及以前:appendfilename "appendonly.aof"
redis7之后:appendfilename "appendonly.aof",但会一分为三,会有三个文件。
如果在命令写入aof时redis挂了,aof会被污染,这时启动redis会报错,无法启动。
修复方法:redis自带的那个aof修复工具:redis-check-aof
在aof文件存放目录下执行命令: redis-check-aof --fix appendonly.aof.1.incr.aof
aof重写:当aof文件越来越大,可以使用aof重写进行文件瘦身
在配置文件中设置aof文件到达什么程度时开始aof重写。
设置重写峰值:auto-aof-rewrite-min-size 64mb
aof文件中有base.aof和incr.aof ,语句保存在incr.aof中,设置的峰值也是设置给incr.aof文件的,
当incr.aof文件超过了峰值,redis会自动aof重写,把incr.aof文件与base.aof文件合并瘦身后写给新的base.aof,而新的incr.aof重新开始记录。
这里把峰值设置为1k方便演示。
如果想要立刻进行aof重写:只需要在redis中执行:bgrewriteaof
RDB 与 AOF 混合持久化
开启或关闭:aof-use-rdb-preamble yes/no
aof的优先级比较高
重启redis时优先载入aof文件来恢复数据(aof的数据集更完整)。rdb更适合用于备份数据库(aof会不断变化不好备份)。
rdb先进行快照存储,aof进行增量保存,当重写策略或手动触发重写时,将最新的数据存储为新的rdb记录。
纯缓存模式
同时关闭aof和rdb
关闭rdb:save "",关闭后依然可以使用save或bgsave生成rdb文件
关闭aof:appendonly no,关闭后依然可以使用bgrewriteaof生成aof文件