持久化
Redis工作时数据都存储在内存中,万一服务器断电,则所有数据都会丢失。针对这种情况,Redis采用持久化机制来增强数据安全性。
RDB机制
每隔一定的时间把内存中的数据作为一个快照保存到硬盘上的文件中。Redis默认开启RDB机制。
RDB触发
- 默认配置,
由于安全性和性能考虑,默认配置了分别以下三个参数
save 900 1 -> 900秒内至少有一次修改则触发保存操作
save 300 10 -> 300秒内至少有10次修改则触发保存操作
save 60 10000 -> 60秒内至少有1万次修改则触发保存操作
// 压力测试:测试是否触发参数保存
/usr/local/redis/bin/redis-benchmark
- 使用命令保存
save -> 同步:前台保存,
bgsave -> 异步:开另一个线程后台保存
- 使用flushall命令:这个命令也会产生dump.rdb文件,但里面是空的,没有意义
- 服务器关闭: 如果执行SHUTDOWN命令让Redis正常退出,那么此前Redis就会执行一次持久化保存。
RDB相关配置
RDB数据安全考虑
-
RDB保存机制为断续性,能够提高安全性,但不是绝对的安全
-
非绝对安全性:在使用持久化机制后如果真的发生内存断电,上一次保存的数据不会丢失,从上一次保存后到故障时间点之间的数据会丢失,这部分数据在整个数据中占比非常低,说明持久化机制并不是提供绝对安全的解决方案,而是大幅度提高安全性。
-
丢失的数据重要性:如果真的有那样绝对不能丢失的数据,例如:金融项目中账目数据,这样的数据也肯定不会仅仅在Redis中存储一份,由此可以推论,Redis中的存储的数据无非是两种情况:
1)在MySQL中有备份
2)不重要,丢了没事 -
内存断电风险:例如服务器断电,需要接UPS(不间断电源),使服务器不会因为断电失去工作
AOF默认配置
RDB和AOF并存时,以AOF为主
AOF数据存储格式
AOF重写机制
持久化文件损坏修复
AOF和RDB对比
RDB:
AOF:
并存:
建议: