5.Redis 持久化
1.Redis 持久化 有两种方式: 快照---RDB文件; 追加式文件---AOF文件(日志记录)
-
RDB 持久化方式会在一个特定的间隔保存那个时间点的一个数据快照.
-
AOF 持久化方式则会记录每一个服务器收到的写操作. 在服务启动时, 这些记录的操作会逐条执行从而重建出原来的数据. 写操作命令记录的格式跟 Redis 协议一致, 以追加的方式进行保存.
-
Redis 的持久化是可以禁用的, 就是说你可以让数据的生命周期只存在于服务器的运行时间里.
-
两种方式的持久化是可以同时存在的, 但是当 Redis 重启时, AOF文件会被优先用于重建数据.
注意:面试会问到 RDB 和AOF 如何适用范围
可以从对数据完整性来说 RDB 保存的数据不是那么全 而 Aof 相对比较全 但耗性能
再从数据备份来说 RDB比较合适 定时生成 RDB 快照非常便于进行数据库备份,并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度快。
当然了,Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少。
2.RDB 工作原理:
Redis 调用fork() 产生一个子进程 ,先把数据写到一个临时的RDB文件中,当子进程写完新的RDB文件后
就把旧的RDB文件直接替换掉。
2.1.文件路径和名称:
默认快照文件存储在 当前目录下一个名为 dump.rdb 的文件. 要修改文件的存储路径和名称, 可以通过修改配置文件 redis.conf 实现: (我是在redis文件目录下创建了一个working目录 用来存储 .rdb)
# RDB文件名,默认为dump.rdb。
dbfilename dump.rdb
# 文件存放的目录,AOF文件同样存放在此目录下。默认为当前工作目录。
dir /usr/local/redis/working
2.2.保存点(RDB的启用和禁用) 都在redis.conf 文件中
你可以配置保存点, 使 Redis 如果在每 N 秒后数据发生了 M 次改变就保存快照文件. 例如下面这个保存点配置表示每 60 秒, 如果数据发生了 1000 次以上的变动, Redis就会自动保存快照文件:
save 60 1000
当然也可以保存多个 redis.conf 配置文件默认设置了 3个
如果想禁用快照保存的功能, 可以通过注释掉所有 "save" 配置达到,或者在最后一条 "save" 配置后添加如下的配置:
save ""
3.AOF
快照并不是很可靠. 如果你的电脑突然宕机了, 或者电源断了, 又或者不小心杀掉了进程, 那么最新的数据就会丢失.而 AOF 文件则提供了一种更为可靠的持久化方式. 每当 Redis 接受到会修改数据集的命令时, 就会把命令追加到 AOF 文件里, 当你重启 Redis 时, AOF 里的命令会被重新执行一次, 重建数据.
3.启用AOF
把配置项 appendonly 设为 yes:
3.1文件路径和名称
# 文件存放目录,与RDB共用。默认为当前工作目录。 dir /usr/local/redis/working # 默认文件名为appendonly.aof appendfilename "appendonly.aof"
3.2可靠性
你可以配置 Redis 调用 fsync 的频率, 有三个选项:
-
每当有新命令追加到 AOF 的时候调用 fsync. 速度最慢, 最安全.
-
每秒 fsync 一次. 速度快 (2.4版本跟快照方式速度差不多), 安全性不错 (最多丢失 1 秒的数据).
-
从不 fsync, 交由系统去处理. 这个方式速度最快, 但是安全性一般.
推荐使用每秒 fsync 一次的方式 (默认的方式), 因为它速度快, 安全性也不错. 相关配置如下:
# appendfsync always
appendfsync everysec
# appendfsync no
3.3 AOF 重写
简单来说 当.aof 到达设定的值大小后 会重写日志 其实就是精简 可以理解为 本来有100记录 重写后 就只有50条了。