Redis持久化

一、持久化原理

1、Redis 具有持久化功能,设置以快照操作日志的形式将数据持久化到磁盘。RDB和AOF。

Redis 持久化称为钝化,是指将内存中数据库的状态描述信息保存到磁盘中。

不同的持久化技术,对数据的状态描述信息是不同的,生成的持久化文件也是不同的。

作用都是相同的:避免数据意外丢失。

二、RDP(Redis DataBase)持久化 

1、RDP介绍

实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写道磁盘上,也就是快照。即使出现宕机,快照也不会丢失,数据的可靠性得到保证,快照文件是RDB文件(dump.rdp)。

2、作用

①在指定的时间间隔内将内存中的数据集快照写入磁盘,即Snapshot内存快照,他恢复是再将硬盘快照文件直接读回内存里。

②redis的数据都在内存中,保存备份时它执行的是全量快照,即把内存所有数据存入磁盘。

③RDB保存的文件是dump.rdb。

3、持久化的触发之自动条件触发

自动条件触发的本质:是 bgsave 命令的执行。

用户通过在配置文件中做相应的设置后,Redis会根据设置信息自动调用bgsave命令执行。

通过 lastsave 命令可以查看最近一次执行持久化的时间,返回一个时间戳。

修改配置文件:

①文件保存路径:dir-->/usr/local/src/redis

②文件名称:dbfilename  dump6379.rdb

4、持久化的触发之手动条件触发

①手动触发两个命令

手动save命令:通过在 redis-cli 客户端中执行 save 命令可立即进行一次持久化保存。save 命令在执行期间会阻塞 redis-server 进程,直至持久化过程完毕。而在 redis-server 进程阻塞期间,Redis不能处理任何读写请求,无法对外提供服务。线上禁止使用

手动bgsave命令:通过在 redis-cli 客户端中执行 bgsave 命令可立即进行一次持久化保存。不同于 save 命 令的是,正如该命令的名称一样,background save,后台运行 savebgsave 命令会使服务器进程 redis-server 会fork一个子进程,由该子进程负责完成保存过程。在子进程进行保存过程中,不会阻塞 redis-server 进程对客户端读写请求的处理。

5、RDB的优劣

优势:①适合大规模的数据恢复、②按照业务定时备份、③对数据完整性和一致性要求不高、④RDB文件在内存中的加载速度比AOF快。

劣势:

①在一定间隔时间做一次备份,如果redis意外宕机,就丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失;

②内存数据的全量同步,如果数据量太大会导致I/O严重影响服务性能

③RDB依赖于主进程的fork,在更大数据集上,可能导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,大致膨胀两倍。需要考虑。

6、触发RDB快照的条件

①配置文件中默认的快照配置、②手动save、bgsave命令、③执行flushall/flushdb命令也会产生dump.rdb文件、④执行shutdown且没有设置开启AOF持久化、主从复制时,主节点自动触发。

7、RDB持久化过程

 三、AOF(Append Only File)持久化

1、AOF介绍

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

默认情况下,redis没有开启AOF,开启配置:appendonly yes。

AOF保存的时appendonly.aof文件。

2、AOF缓冲区写回策略

Always:同步写回,每个写命令执行完立刻同步的将日志写回磁盘。可靠性高,数据基本不丢失

everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘。性能较好

no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。性能好

3、AOF优势

更好的保护数据不丢失、性能高、可做紧急回复。

4、AOF劣势

相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb。

aof运行效率要慢于rdb,每秒同步策略较好,不同步效率和rdb相同。

5、AOF重写机制

启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

①触发机制之手动触发:客户端向服务器发送bgrewriteaof命令。

触发机制之自动触发:满足配置文件中的选项后,Redis会记录上次重写的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时。

6、AOF持久化过程

 四、RDB和AOF混合持久化

1、两种方式同时开启

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

RDB数据不实时,同时使用两者时服务器重启也只会找AOF文件,因为RDB更适合用于备份数据库,可以保留RDB作为保障。

2、RDB和AOF混合方式

①开启混合方式设置-->aof-use-rdb-preamble  yes    yes是开启,no是关闭。

RDB+AOF的混合方式-->RDB镜像做全量持久化,AOF做增量持久化。

先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。

3、同时关闭RDB和AOF

禁止rdb——save ""               禁止aof——appendonly no

以下是一些关于 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 持久化的原理、机制、优缺点、与集群的结合等方面的知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IsLuNaTiC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值