Redis持久化机制(面试考)
Redis持久化
问题
问:把服务器关了,再重新打开服务器,数据会不会丢失?
会部分丢失,因为默认redis服务器每隔一段时间写入一次内存中数据到硬盘上
概述
什么是Redis持久化:
Redis是一个内存存储的数据库,内存必须在通点电的情况下才能对数据进行存储。如果,在使用redis的过程中突然发生断电,数据就会丢失。为了防止数据丢失,redis提供了数据持久化的支持。
持久化:把内存中的数据保存到硬盘上。
作用:防止数据在断电的情况下丢失。
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。
redis支持两种持久化方式:一种是RDB(快照)也是默认方式,另一种是Append Only File(缩写AOF)的方式。下面分别介绍:
注意:redis将内存中数据,写在硬盘文件上。服务器关闭,电脑重启数据也不会丢失
Redis持久化的两种方式
1.RDB:Redis DataBase 默认的持久化方式,以二进制的方式将数据写入文件中。每隔一段时间写入一次。
2.AOF:Append Only File 以文本文件的方式记录用户的每次操作,数据还原时候,读取AOF文件,模拟用户的操作,将数据还原。
RDB持久化介绍
RDB是默认的持久化方式。这种方式就是将内存中数据以快照的方式写入到二进制文件爱你中,默认文件名为:dump.rdb。
补充:快照:当前内存中数据的状态。
可以通过配置设置自动做快照持久化的方式。如下面配置的是RDB方式数据持久化时机,必须两个条件都满足的情况下才进行持久化的操作:
关键字 | 时间(秒) | 修改键数 | 解释 |
---|---|---|---|
save | 900 | 1 | 到了15分钟修改了1个键,则发起快照保存 |
save | 300 | 10 | 到了5分钟修改了10个键,则发起快照保存 |
save | 60 | 10000 | 到了1分钟修改了1万个键,则发起快照保存 |
RDB优缺点
缺点:
可能导致数据丢失。因为RDB是每隔一段时间写入数据,所以系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
优点:
持久化效率高,持久化的是内存中的数据
数据库宕机后,数据恢复的效率要更高;
AOF的存储方式
AOF持久化简介
由于快照方式是在一定间隔时间做一次的,所以如果redis宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF持久化方式。
AOF指的是Append only file,使用AOF持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是appendonly.aof).当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。也可以通过该文件完,成数据的重建。该机制可以带来更高的数据安全性,所有的操作都是异步完成的。
三种策略对比
AOF持久化机制配置
开启AOF持久化
AOF默认是关闭的,首先需要开启AOF模式
参数配置 | 说明 |
---|---|
appendonly | 默认是no,关闭。如果要打开,设置为yes |
AOF持久化时机
关键字 | 持久化时机 | 解释 |
---|---|---|
appendsync | everysec | 每秒记录 |
appendsync | always | 每修改记录 |
appendsync | no | 完全依赖操作系统,性能最好,持久化无法保证 |
AOF优缺点
优点:
备份机制更稳健,丢失数据概率更低。
可读的日志文本,通过操作AOF文件,恢复误操作。
缺点:
比起RDB方式占用更多的磁盘空间。
恢复备份速度比RDB要慢。
每次写都同步的话,有一定的性能压力。
存在个别Bug,造成恢复不能。
Redis持久化机制RDB和AOF的区别
Redis持久化AOF和RDB的优缺点:
AOF(Append Only File):
优点:
1. 可以提供更高的数据安全性,每次写入都会 append 到文件,如果出现故障,可以通过配置 appendfsync 选项来保证所有已经 append 的数据都被写入到磁盘中。
2. AOF 文件是可读的,可以处理损坏的 AOF 文件。
3. AOF 支持每秒同步、每修改同步、不同步等多种策略。
4. AOF 文件是一个文本文件,可以处理 AOF 文件来手动修复或者恢复数据。
缺点:
1. 对于相同的数据,AOF 文件的体积通常要比 RDB 文件的体积大。
2. 对于大规模的数据集,AOF 可能会比 RDB 启动得慢。
3. 在某些极端情况下,AOF 可能会导致数据丢失。
RDB(Redis Database):
优点:
1. RDB 是一个压缩的二进制文件,非常适合用于备份。
2. 对于数据恢复来说,RDB 文件的恢复速度要比 AOF 快。
3. 相同数据集的话,RDB 的体积通常要小于 AOF 文件。
缺点:
1. 如果你需要尽量避免数据丢失,RDB 可能不适合你。因为 RDB 是定时进行快照的,如果 Redis 在快照进行时出现故障,那么这段时间内的数据就会丢失。
2. RDB 需要经常 fork() 子进程来执行快照保存,当数据集很大的时候,可能会导致对系统性能的影响。
综合考虑,如果对数据安全性要求较高,且可以接受较长的恢复时间,推荐使用 AOF。如果对数据安全性要求不高,且更关心启动速度和性能,推荐使用 RDB。