1.两种持久化机制的介绍

  1.1 RDB

    周期性的生成redis内存数据的一份完整的快照

    1)根据配置的检查点,生产rdb快照文件,fork一个子线程,将数据dump到rdb快照文件中,完成rdb文件后,替换之前的旧的快照文件

    2)配置方式,在redis.conf文件中配置save 60 1000(每隔60,如果有超过1000个key发送了变化,就生产一份新的dump.rdb文件)

    3)save可以配置多个,就是多个检查点,只要符合就会进行rdb备份

    4)也可以手动调用save或bgsave命令,同步或异步进行rdb备份

   1.2 AOF(需要在redis.conf文件中开启aof持久化   appendonly yes)

    对每一条写入命令作为日志,以append-only的模式写入到一个日志文件中,redis重启时可以通过回放AOF日志文件重新构建整个数据集。

    1)写日志时,不直接写入到磁盘,而是先写入到os chache中,然后一定时间间隔(每一秒)调用一次操作系统的fsync操作,强制将os chache中的数据,刷入到磁盘文件中。  

      fsync可配置的策略:

        appendfsync always  #每写一条数据,就执行一次fsync,性能非常差

        appendfsync everysec #每秒将os cache中的数据fsync到磁盘,生产环境一般这样配置

        appendfsync no  #仅将数据写入到os cache,redis自己时不时的会调用fsync,不受控制

    2)AOF是存放每条写命令的,所以AOF文件会不断膨胀,当大到一定的时候,就会触发AOF 的rewrite操作

      AOF rewrite操作:基于当前redis内存中的数据,重新构建一个更小的aof文件,然后将旧的aof文件删除

     rewrite可配置的策略:

      auto-aof-rewrite-percentage 100 #当rewrite增长到指定的比例是,进行aof rewrite

      auto-aof-rewrite-min-size 64mb  #aof rewrite时的最小文件大小,只有超过指定的大小才会就行rewrite

    3)如果同时开启了RDB和AOF两种持久化机制,redis在重启时,会从aof文件中恢复数据

2.两种持久化机制优缺点的比较

  2.1 RDB的有优点

    1)每一个dump.rdb文件代表了某一时刻redis中的全部数据的快照,非常适合做冷备份

    2)直接基于rdb文件重启和恢复redis数据,速度更快(rdb是基于数据文件进行恢复,aof是基于写指令进行回放)

    3)rdb对redis对外提供读写服务影响小,可以让redis保持高性能(rdb每次写都是写入到内存中,一定时间后,fork出一个子进程进行磁盘IO操作;aof需要每次写文件,虽然是先写os cache,但也有一定的开销)

  2.2 RDB的缺点

    1)如果发生故障,数据丢失的可能比较多(每隔一段时间才会进行备份一次)

    2)每次fork子进程进行io操作,如果数据文件特别大,会造成客户端提供的服务暂停数毫秒

  2.3 AOF的优点

    1)如果发生故障,数据丢失的比较少(每秒执行一次fsync,只会丢失一秒的数据)

    2)aof日志文件以append-only模式写入,没有磁盘寻址的开销,写入性高,即使有文件破损,也可以很容易修复(redis-check-aof --fix 要修改的aof文件)

    3)aof通过可读性的方式记录,适合灾难性的误删除的紧急恢复(直接删除aof中的该指令进行重启redis即可)

  2.4 AOF的缺点

    1)相同的数据,aof文件要不rdb文件大

    2)aof开启后,QPS会降低(每秒会进行fsync操作)

    3)数据恢复时,需要基于指令回放操作,恢复速度慢,容易出现bug

3.两种持久化机制的选择

  同时开启两种持久化机制,用aof保证数据的不丢失,作为数据恢复的第一选择;用rdb进行冷备,在aof文件不可用是,作快速数据恢复。

4.开启两种持久化机制时的数据恢复

  4.1 如果redis进程挂掉了,重启redis进程即可,基于aof进行恢复

  4.2 如果redis所在的机器挂掉了,重启机器后,尝试重启redis进程,基于aof进行恢复,如果aof文件有破损,使用redis-check-aof fix进行修改

  4.3 如果redis当前最新的aof和rdb文件都丢失或者损坏了 

    1)停止redis,删除appendonly.aof文件和dump.rdb文件

    2)修改redis.conf文件,关闭appendonly no

    3)从云端拷贝dump.rdb文件,重启redis进程

    4)在redis命令行中,热修改配置开启aof,config set appendonly yes

    5)停掉redis进程,修改redis.conf文件,开启aof,appendonly yes

    6)重启redis

最新文章

  1. selenium web driver 使用JS修改input属性
  2. PHP 流程管理
  3. windows开机记录查询
  4. android技巧总结
  5. JS的构造函数
  6. 学习Shell脚本编程(第1期)_Shell命令行书写规则
  7. Unity 区分不同平台
  8. ModelAndView使用方法
  9. java printf与println的区别
  10. javascriptDOM编程艺术_学习笔记_知识点 动态创建标记
  11. 【LeetCode】29. Divide Two Integers
  12. PHP核心技术
  13. ELK介绍
  14. Java中的List转换成JSON报错(二)
  15. linux中open函数使用
  16. Sort Array By Parity II LT922
  17. 洛谷P3242 接水果 [HNOI2015] 整体二分
  18. virtual安装linux
  19. Java编程的逻辑 (64) - 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件
  20. ruby安装卸载

热门文章

  1. 修改ps工具栏字体大小
  2. 上传.cgi在252板子上跑
  3. spring-boot-shiro-jwt-redis实现登陆授权功能
  4. CentOS 7 LNMP环境搭建 Zabbix3.4
  5. vue tab切换布局
  6. python基础:1.位、字节、字的关系
  7. Java自定义注解学习
  8. 使用Docker搭建Cloudera Hadoop 环境搭建
  9. C#中的6种常见的集合
  10. 2018-2019 2 20165203 《网络对抗技术》Exp8 Web基础