Redis的持久化

RDB(Redis DataBase)

1.RDB是什么?

在指定的时间间隔内将内存中的数据集快照写入磁盘,
也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到
一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能
如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方
式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

RDB保存的文件叫做dump.rdb

2.相关配置文件

在这里插入图片描述
seconds:代表多少秒内 changes:多少次变化,即key的改变次数
在这里插入图片描述
redis默认的保存策略:每十五分钟修改1次 每五分钟修改10次 每一分钟修改10000次即进行一次RDB持久化

触发RDB快照的方式有命令save和bgsave
save:save时只管保存,其它不管,全部阻塞
bgsave:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间

3.如何恢复

将文件(dump.rdb)移动到redis的安装目录下然后启动服务即可将数据恢复到内存中

4.RDB的优点和缺点

  • 优点:适合大规模的数据恢复 对数据完整性和一致性要求不高**
  • 缺点:在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改 fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑

5.停止RDB保存规则的方法

redis-cli config set save " "

AOF(Append Only File)

1.AOF什么?

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis
重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

AOF保存的是appendonly.aof文件

2.相关配置文件

在这里插入图片描述
appendonly no/yes 表示关闭和打开AOF持久化 默认为关闭
appendfilename “xxx” 表示设置保存的AOF文件的文件名

在这里插入图片描述
always:表示每次修改同步,每次发生数据变更会被立即记录到磁盘 性能比较差但数据完整性好
everysec:表示每秒同步,异步操作,每秒记录,一秒内宕机会出现数据丢失
no:表示不同步

3.AOF的启动/修复/恢复

启动:修改配置文件appendonly yes即可开启
修复:执行redis-check-aof --fix进行修复,可将不符合AOF文件格式的指令删除
恢复:启动redis时即可自动加载

4.AOF的重写机制(rewrite)

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,
只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof

原理:AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件。

触发机制: Redis会记录上次重写时的AOF文件大小,默认配置时当AOF文件大小时上次重写后的两倍却大于64MB时触发

5.AOF的优点和缺点

优点:AOF解决了RDB不能实时持久化的文件
缺点:相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

总结

RDB持久化能在指定时间间隔对数据进项快照存储

AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些
命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.
Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

如果将Redis只作为缓存 没必要开启任何一种持久化方式

如果同时开启两种持久化方式

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,
因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),
快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于 Redis 持久化的可能面试问题: 1. Redis持久化有哪些方式? Redis持久化有两种方式,一种是 RDB 持久化,一种是 AOF 持久化。 2. RDB 持久化和 AOF 持久化有什么区别? RDB 持久化是将 Redis 在内存中的数据快照保存到磁盘上,而 AOF 持久化则是将 Redis 执行的每条写命令记录到磁盘上。RDB 持久化可以节约磁盘空间,但可能会丢失最近的一些数据,而 AOF 持久化可以保证数据不会丢失,但可能会占用更多的磁盘空间和写入时间。 3. Redis持久化机制是如何保证数据一致性的? Redis持久化机制可以通过在每次写操作后立即同步到磁盘,或者设置定期同步时间来保证数据一致性。 4. Redis持久化可以在运行时进行吗? 可以,Redis持久化可以在运行时进行配置和切换,例如可以在运行时从 RDB 切换到 AOF 持久化,或者从 AOF 切换到 RDB 持久化。 5. Redis持久化会对性能产生影响吗? 会,Redis持久化会增加磁盘 I/O 开销,可能会对写入性能产生一定的影响,但可以通过合理的配置来平衡性能和数据一致性。 6. Redis持久化可以与 Redis 集群一起使用吗? 可以,Redis持久化可以与 Redis 集群一起使用,但需要注意配置文件的设置和数据同步的策略。 总之,Redis持久化是保证数据一致性和可靠性的重要手段,需要根据具体的业务需求和性能要求来选择合适的持久化方式,并进行合理的配置和优化。在面试中,还需要了解 Redis 持久化的原理、机制、优缺点、与集群的结合等方面的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值