Redis学习笔记(2)

Redis的持久化

Redis的持久化有RDBAOF两种机制,两种机制可以同时生效,当两个文件(dump.rdb、appendonly.aof)同时存在时,Redis重启时优先采用AOF方式恢复数据。

RDB(Redis Database)

RDB持久化方式能够在指定的时间间隔能对你的数据(snapshot快照)进行快照存储

  • Redis单独创建(fork)(复制,子进程与原进程的所有数据完全一样)一个子进程用于持久化,会将内存中的数据写入临时文件,待持久化过程结束后,再用这个临时文件替换上次持久化好的文件
  • dump.rdb
  • redis-check-dump
  • 主进程不需要IO操作,极大地保证了性能
  • 缺点是最后一次持久化的数据可能丢失,fork时会产生两倍的膨胀性。适用场景为数据规模大、对数据完整性要求不高的情景
  • 配置:SNAPSHOTTING

AOF(Append Only File)

AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

  • 以日志的形式来记录每个写操作(类似于MySQL的redo日志)

举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。

  • appendonly.aof
  • 仅在断电等特殊情况下可能丢失一秒的数据
  • AOF文件的体积更大。AOF文件超过指定大小时,会触发重写机制,Redis会对AOF内容进行压缩。可以使用bgrewriteaof指令保留最小指令集
  • 重写机制

AOF文件过大(默认配置为当AOF文件大小是上次rewrite后大小的一倍且大于64MB时触发)时,会fork一条新进程重写文件(先写临时文件再rename)。具体方法为:遍历新进程的内存中数据,每条记录产生一条set语句,并没有读取旧的aof文件。这方面与快照有点类似。

  • 可通过redis-check-aof修复aof文件
  • 配置:APPEND ONLY MODE

Redis.conf 之 SNAPSHOTTING

save

save <seconds> <changes>

disable:不设置任何save指令,或传入空字符串“”

In the example below the behaviour will be to save:
after 900 sec (15 min) if at least 1 key changed
after 300 sec (5 min) if at least 10 keys changed
after 60 sec if at least 10000 keys changed

注:shutdown命令和一般情况下的flushall、flushdb命令会导致dump文件立即更新,即删库后最新dump文件恢复后Redis内容为空。因此需要备份历史dump文件。

在Redis终端中使用savebgsave命令强制更新dump文件。

save和bgsave的区别在于bgsave是在后台进行快照的异步处理,快照仍能响应客户端请求

stop-writes-on-bgsave-error

默认为yes,代表持久化过程出错时停止写入

配置为no表示不在乎数据不一致或者有其他应对手段

rdbcompression

对快照的持久化启用LZF压缩算法,默认为yes

rdbchecksum

存储快照时采用CRC64算法进行数据校验,默认为yes

dbfilename&dir

存储文件名,默认为dump.rdb;文件夹,默认为./

Redis.conf 之 APPEND ONLY MODE

appendonly

是否开启aof,默认为no

appendfilename

appendfsync

aof策略,默认为everysec。可选always、everysec、no

no: don't fsync, just let the OS flush the data when it wants. Faster.
always: fsync after every write to the append only log . Slow, Safest.
everysec: fsync only one time every second. Compromise.

auto-aof-rewrite-percentage&auto-aof-rewrite-min-size

aof文件重写相关配置,默认配置为100、64mb

no-appendfsync-on-rewrite

重写是是否允许appendfsync,默认为no,可以保证数据安全性

posted @ 2020-06-08 13:36  周周zzz  阅读(92)  评论(0编辑  收藏  举报