RDB和AOP解决的问题
由于redist是内存型数据库,有时候可能出现redis挂掉而导致缓存丢失的问题,RDB 和 AOP 都是为了解决这个问题,也是redis官方提出的两种数据持久化方案。redis官网
RDB
RDB持久化 按指定的时间间隔
执行数据集的时间点快照。将rdb文件存储在配置文件中指定的文件目录,若存在则直接加载rdb文件中的数据,若不存在则创建一个新的
,也是redis配置文件中默认开启的。
优点
- 适合大规模的数据恢复
- 对数据完整性和一致性要求不高
缺点
在一定间隔时间做一次备份,所以如果redis意外down掉的话,就 会丢失最后一次快照后的所有修改
Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑
康康官网的
测试案例
1、修改保存规则
改为30s内有5个key发生变化就保存一次
修改rdb文件位置
2、使用修改后的配置文件启动服务
# 启动服务
./redis-server /root/myredis/redisRDB.conf
# 进入客服端
./redis-cli
单纯启动是看不到rdb文件的,当执行任何读写命令后(第一次可执行 flushall 产生一个空的 rdb 文件),可以看到会在指定的目录中生成 rdb 文件
3、添加数据测试
因为在配置文件中配置的是 5s 内若有5个key发生变化,就会进行一次保存,所以这里测试的也是五个 key
等待30s后,再一次查看可以看到 rdb 文件变大了,说明把 key 进行了一次存储
4、模拟挂掉的情况
# 停止服务
./redis-cli shutdown
# 重新启动
./redis-server /root/myredis/redisRDB.conf
# 进入redis-cli
./redis-cli
# 查看key
keys *
可以看到这些 key 被保存到了rdb文件中,从而实现了数据的持久化