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 李四 是不是就可以将前一条命令给剔除