Redis持久化数据的两种模式

一、RDB模式

1、Redis默认启用的本地化模式。
2、每隔一段时间全量备份;系统将导出的dump.rdb文件备份。

  1. save 900 1 #900秒内 至少1key 被更新 就全量备份RDB
  2. save 300 10
  3. save 60 10000

3、原理:redis会fork一个新的进程来进行rdb全量结构化。(redis本身读写是单进程的)
4、缺点:备份后和故障间 数据丢失;新fork的子进程会copy父进程里的内存数据进行备份,会造成内存瞬间翻倍。

二、AOF模式

1、AppendOnlyFile的缩写,是一种增量备份模式,Redis默认不开启。
2、类似mysql数据库的binlog,记录所有的redis操作记录

  1. appendonly yes #开启AOF
  2. appendfilename "appendonly.aof" #设置备份文件名
  3. appendfsync everysec #每秒更新一次操作记录

3、Redis会在原有进程的基础上,重新fork一个子进程进行记录
4、日志形式记录写操作;以文件追加的方式记录(在同一个备份文件上追加操作记录)

RDB和AOF之间的关系

1、优先级AOF>RDB
2、RDB和AOF之间是不会相互通信的

如何切换持久化策略

1.错误场景

  1. 改完配置文件打开AOF

    1. #开启AOF
    2. appendonly yes
  2. 重启了redis—server

    1. redis-server redis.conf

    AOF在重启redis之后才开始生效。
    重启之后,redis 首先加载AOF的备份文件(因为开了AOF开关),但是AOF是空的,所有Redis内存就被加载为空了。
    这个时候,一旦触发或满足了RDB全量备份的条件,Redis会对整个内存数据库进行全量备份,并且覆盖掉原先的备份文件。
    但这个时候,Redis的内存是空的,完整RDB之后,就把空内存库全量备份 覆盖了原有的RDB备份文件。
    所以,内存空了,AOF还啥都没有,之前的RDB备份文件也被覆盖了。

    2.正确用法
    在线修改AOF开关

    不要随便重启Redis!!!因为重启就会涉及到Redis内存的重新加载。

    1、登录到redis

    1. #链接到redis
    2. [root@mail ~]# redis-cli -a 123456[你的密码] -p 6379

    2、在线修改AOF开关

    ```java

    redis中查看AOF状态

    127.0.0.1:6379> config get appendonly 1) “appendonly” 2) “no”

在线设置AOF开关为yes

127.0.0.1:6379> config set appendonly yes OK 127.0.0.1:6379>

  1. <a name="kTIDD"></a>
  2. ### 3、查看数据
  3. ```java
  4. #数据都在
  5. 127.0.0.1:6379> keys *
  6. 1) "name"
  7. 2) "gender"
  8. 3) "age"
  9. 127.0.0.1:6379>

而且备份文件AOF和RDB也都正常持久化中