聊一下redis的持久化

181 阅读2分钟

redis作为常用的nosql数据库之一,数据存储于内存之中。我们都知道内存中的数据一旦宕机就无可恢复,显然这对于我们的业务来说是无法接受的。那就谈一下redis持久化的两种方式


rdb

首先我们很容易想到一种方式就是使用io将数据写入磁盘进行存储,没错这就是redis持久化的一种策略。在进行特定的配置之后就可以生成某一时刻的快照,存储文件以xxx.rdb结尾

  • save 主动使用命令可以立即将内存的数据进行持久化
    • 缺点 由于进程持久化io操作频繁,会导致进程的阻塞,有可能导致业务的混乱
    • 非特殊情况不推荐使用
  • bgsave 主动使用后台持久化,本质是redis进程会调用fork函数让子进程执行io操作
    • 缺点 会占用额外的内存空间
    • 推荐使用
  • 配置save 在conf文件中配置特定参数就可以让redis在配置对应条件下执行持久化 上面的三种方式本质都是持久化数据,对于资源的消耗是重量级的。在redis的非正常关闭后,重新启动会将rdb文件加载内存用以恢复数据

AOF

还有一种策略,我们可以记录 使用过哪些命令,同样也是在conf文件进行配置。在redis的非正常关闭后,重新启动会在此执行aof文件中的命令

  • aof的优化 在文件过于臃肿或者数据重合度过高及其他情况,redis会对aof文件进行重写。优化的本质的剔除一下无效操作。例如 set user1-name 张三, set user1-name 李四 是不是就可以将前一条命令给剔除