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条了。
posted @ 2020-12-23 17:28  SoToHard  阅读(83)  评论(0编辑  收藏  举报