Redis的持久化方式

   日期:2020-05-31     浏览:91    评论:0    
核心提示:Redis 提供了2个不同形式的持久化方式RDB(Redis DataBase)RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里RED 是 redis默认的持久化方式(默认开启)备份是如何执行的Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如数据库

Redis 提供了2个不同形式的持久化方式

RDB(Redis DataBase)

RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里

RED 是 redis默认的持久化方式(默认开启)

备份是如何执行的

  • Redis 会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

Fork

  • Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
  • 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了 写时复制技术
  • 一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
  1. redis.conf 配置文件中,253 行可以修改 rdb 持久化文件的名称
  2. 263 行可以设置持久化备份文件的存放位置
  3. rdb备份的保存策略
  4. redis 中执行命令时,如果执行 save (同步)或者 bgsave (异步),也可以触发 redis 使用 rbd 的方式将内存的数据写入到 rdb 文件
  5. redis正常关闭时,也会自己调用bgsave完成数据的备份
  6. 如果本次保存后,下一个保存还未开始,如果redis宕机了,会导致时间间隔内的所有的数据丢失
  7. 如果我们对数据保存的粒度没有太高的要求,推荐使用rdb
  8. mysql(持久化)+redis(内存存储)

AOF(Append Of File)

将每次的写操作以日志的形式保存到日志文件中(可读的),比较占磁盘空间,保存粒度细,恢复时会将aof文件中的所有的写指令从前到后执行一遍,性能较差。

  1. 开启aof持久化 , 修改redis配置文件 appendonly no 改为 yes

AOF和 RDB

  1. 如果都启用,备份时两个都会备份
  2. 如果redis启动时,优先加载 aof 中的数据( aof 保存数据粒度细,丢失概率小)
  3. 取消rdb备份:注释掉 #dbfilename ""

AOF备份防止误操作

  1. AOF 以日志形式保存,所有的写指令都是以增量的方式追加
  2. 如果有误操作我们可以手动修改aof文件删除误操作
  3. AOF同步策略

触发机制,何时重写

  1. Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
  2. 重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。
  3. 系统载入时或者上次重写完毕时,Redis会记录此时AOF大小,设为base_size
  4. 如果Redis的AOF当前大小>= base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。

AOF优点:

  1. 备份机制比较稳健(丢失数据概率小)
  2. 不用额外备份,可以直接通过aof文件防止误操作

缺点:

  1. 日志方式保存,占用磁盘空间较多
  2. redis加载时会从前到后将所有命令都执行一遍,恢复数据时慢
  3. aof方式保存的粒度细,redis性能压力大

RDB和AOF的选择以及区分:

  1. 官方推荐如果一定要使用缓存,可以两个都使用
  2. 如果不考虑数据的丢失问题,可以只使用rdb
  3. 不推荐单独使用aof,如果要用推荐aof+rdb一起用
  4. 如果有mysql之类的持久化方式,redis只作为纯内存缓存,可以不开启持久化

感谢阅读, 如果文章对你有帮助记得点赞 收藏 + 关注哦 ! 各种疑难杂症QQ交流群:1101584918,欢迎大家加入。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服