缓存学习总结-数据持久化

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会丢失周期时间内的数据。主要是要了解这两种存储方式的区别。


版权声明:本文为a200822146085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。