redis如何实现持久化,保证关机、宕机、重启后,数据仍不丢失?
一、持久化
redis的数据都存在内存中,没有配置持久化的话,数据就会全部丢失,于是需要开启redis的数据持久化功能,将数据保存在磁盘上,,当redis重启后,可以从磁盘上恢复数据。
二、持久化的方式
redis数据持久化的方式只有两种:RDB和AOF。
1、RDB持久化
能够在指定时间间隔对你的数据进行快照存储。
2、AOF(append only on file)持久化
每次对服务器写的操作,将命令都写入文件中,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
三、RDB方式
1、实现方式
客户端直接通过命令BGSAVE或SAVE来创建一个内存快照。BGSAVE调用fork来创建一个子进程,,子进程负责将快照写进硬盘,而父进程继续处理命令。SAVE在执行SAVE命令的过程中,不再响应其他的命令。
2、redis.conf配置
#900秒内至少一次写操作,触发BGSAVE
save 900 1
#300秒内至少10次写操作,触发BGSAVE
save 300 10
save 60 10000
save 3 2
修改持久化保存的文件名
重启服务,关联配置文件
3、优点和缺点
优点:
对性能影响较小
RDB文件恢复比AOF恢复要快
缺点:
数据触发有批次间隔,可能有数据丢失
如果数据集非常大而CPU不够强(单核),redis在fork子进程时可能会消耗相对较长的时间,影响Redis对外提供服务的能力。
4、RDB数据触发宕机情况下数据丢失问题
上面设置最短的触发是3秒内两次提交,会触发bgsave,一共set了7次,触发了3次bgsave,强制杀掉redis server进程(模拟服务挂了),重启redis server,查看a6为空,说明a6没有完成持久化,丢失了。
rdb文件为乱码,是无法直接查看的
四、AOF方式
1、实现方式
全量备份、增量备份。AOF数据的变动都记录下来。
2、优缺点
优点:
1、最安全。追加实时
2、容灾,实时追加
3、易读、可修改
缺点:
文件体积大
性能消耗比RDB大
数据恢复比RDB慢
2、开启AOF持久化
appendobly yes
3、在redis.conf如何配置
#注释RDB配置方式
#save 900 1
#save 300 10
#save 60 1000#开启配置
appendonly yes#设置每秒一次
#appendfsync always
appendfsync everysec
appendfsync no
#修改持久化保存的文件名
appendfilname “appendonly.aof”
重启redis服务,关联配置文件
./redis-server ../redis.conf
4、演示
刚才设置了每秒提交一次,除非突然断电或者是挂了,可能在那一秒有数据丢失。可以查看AOF文件具体内容
AOF文件是可以修改的,但是在生产环境数据量大,不可能手动去改。
实际很多时候都不会开启持久化,如果想要数据不丢失,AOF每秒都记录。
AOF可能宕机的那一秒会丢失数据,RDB会丢失周期时间内的数据。主要是要了解这两种存储方式的区别。