Redis持久化

                                               Redis之持久化

 
什么是持久化 ?
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化
 
为什么要进行持久化?
防止数据的意外丢失,确保数据安全性
 
持久化过程保存什么
RDB  将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
AOF 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程

 

RDB

RDB启动方式

save 手动执行一次保存操作

注意:save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用

 
bgsave 手动启动后台保存操作,但是不立即执行
 
注意: bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用
 
save second changes 自动执行
作用 :满足限定时间范围内key的变化数量达到指定数量即进行持久化
参数 
  • second:监控时间范围
  • changes:监控key的变化量
位置 :在conf文件中进行配置
 
注意: save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的
            save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系
            save配置启动后执行的是bgsave操作
 
RDB三种启动方式对比
方式save指令bgsave指令
读写同步异步
阻塞客户端指令
额外内存消耗
启动新进程

RDB优点

  • RDB是一个紧凑的二进制压缩文件,存储效率高
  • RDB内部存储的是Redis某个时间点的数据快照,非常适用于数据备份,全量复制等场景
  • RDB恢复数据的速度要比AOF快很多
  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程数据机器当中,用于灾难恢复

RDB缺点

  • RDB无论是指令还是利用配置,无法做到实时持久化,据有较大的可能性
  • bgsave指令每次运行都要执行fork操作创建子进程,要牺牲一些性能
  • Redis的众多版本中未进行RDBA文件格式统一,有可能出现各个版本服务器之间数据格式无法兼容的现象

AOF

AOF概念

AOF持久化:以独立日志的方式记录每一次写命令,重启是再将执行AOF文件中命令已达到恢复数据的目的。与RDB相比可简单描述为记录数据为记录数据的产生过程。

AOF写数据的三种策略

  • always(每次)
    • 每次写入操作均同步到AOF文件中,数据零误差性能较低
  • everysec(每秒)
    • 每秒将缓冲区指令同步到AOF文件中,数据准确性较高性能较高在系统突然宕机的情况下只会失去一秒的数据
  • no(系统控制)
    • 有系统控制每次同步到AOF文件的周期整体过程不可控

AOF功能开启

配置: appendonly  yes | no

作用:是否开启AOF持久化功能,默认不开启

配置:appendfsync  always | everysec | no

作用:AOF写数据的策略

 

AOF的重写

随着命令不断写入AOF,文件越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转换为写命令到同步到新AOF文件的过程。简单说就是将对同一个数据的若干条命令执行结果转化成最终结果数据对应的指令进行记录。

AOF重写的作用

  • 降低磁盘占用量,提高磁盘利用率
  • 提高持久化效率,降低持久化写时间,提高IO效率
  • 降低数据恢复用时,提高数据恢复效率

AOF重写规则

  • 进程已超时的数据不再写入文件
  • 忽略无效指令,重写时使用进程内数据直接生成,这样的AOF文件只保留最终数据的写入命令
  • 对同一数据的多条写入命令合并为一条

AOF的重写方式

  • bgrewriteaof 手动重写
  • 自动重写
    • auto-aof-rewrite-min-size size
    • auto-aof-rewrite-percentage percentage
RDB 与 AOF对比
持久化方式RBDAOF
占用储存空间
存储速度
恢复速度
数据安全性会丢失数据依据策略觉得
资源消耗高/重量级低/轻量级
启动优先级

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值