RDB
在配置文件中可以配置rdb的规则
save 900 1 #900秒内一次操作
save 60 10000 #60秒内10000次操作
dbfilename dump.rdb #文件名
dir /vaar/lib/etc/6379 #文件路径
通过fork出子进程来保存数据集到硬盘上(子进程可以得到父进程中export得环境变量,并且子父进程对其修改后对方得到得仍是原值)
缺点
当数据较大,fork子进程保存数据耗时
数据丢失相对多
优点
文件相对小、恢复速度按快
SAVE
保存数据,会阻塞
BGSAVE
异步保存数据,fork一个子进程将数据保存到磁盘
AOF
优点
使用默认的每秒fsync策略,最多丢失1秒的数据
缺点
对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB
appendonly yes #开启aof
appendfilename "appendonly.aof" #文件名
# appendfsync always
appendfsync everysec #三种aof策略
# appendfsync no
将内存数据写到内核的缓冲区中,然后通过flush刷到磁盘上
everysec:每隔一秒将写到内核中的数据刷到磁盘上
aof-use-rdb-preamble yes
开启混合持久化,更快的AOF重写和启动时数据恢复
重写 bgrewriteaof
:优化aof文件体积
4.0版本以前 删除抵消的指令、合并重复的指令(不开启混合持久化)
4.0版本后 将老的数据以rdb形式写到aof文件中,将新增的操作append到aof文件中(开启混合持久化)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
触发自动重写,当aof文件达到64m自定重写。percentage指定百分比为0,将禁用aof自动重写功能
no-appendfsync-on-rewrite no
如果为no 当有子进程在写入数据到磁盘中时就主进程不会把写操作append到aof文件 这样做可能会丢失更多数据但避免阻塞
如果为yes 当有子进程在写入数据到磁盘中时同时主进程会把写操作append到aof文件中,这样不会丢失更多数据,但会造成阻塞
aof-load-truncated yes
yes 末尾被截断的 AOF 文件将会被加载,并打印日志通知用户
no 服务器将报错并拒绝启动.使用redis-check-aof 工具修复AOF文件,再重新启动
如果使用flushall删除所有数据后没用重写aof文件(比如bgrewirte),只需将添加到aof文件结尾的flush命令删除重启即可恢复数据