Redis持久化

概述

Redis的高性能是由于其将所有数据都储存在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化.
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式.可以单独使用其中一种或将二者结合使用.

  1. RDB持久化(默认支持,无需配置)
    该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.
  2. AOF持久化
    该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的.
  3. 无持久化
    可以通过配置的方式禁用Redis服务器的持久化功能
  4. Redis可以同时使用RDB和AOF

RDB

优势

  1. 一旦采用该方式,那么整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的.
  2. 对于灾难恢复而言,RDB是非常不错的选择,因为我们可以非常轻松的将一个单独的文件压缩后再转移到其他存储介质上.
  3. 性能最大化,对于Redis的服务进程而言,在开始持久化是,它唯一需要做的只是fork出子进程,之后再由子进程完成遮羞持久化的工作,这样就可以极大的避免服务进程执行IO操作.
  4. 相比于AOF机制,如果数据集很大,RDB的启动效率会更高

劣势

  1. 如果想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择,因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及羞辱磁盘的数据都将丢失.
  2. 由于RDB在通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒.

配置说明

redis.conf配置文件

快照参数设置

  • save 900 1 #每900秒至少有1个key发生变化,则dump内存快照
  • save 300 10 #每300秒至少有10个key发生变化,则dump内存快照
  • save 60 10000 #每60秒至少有10000个key发生变化,则dump内存快照

保存位置设置

dbfilename dump.rdb #rdb保存文件名称
dir ./ #rdb保存位置


AOF

优势

  1. 该机制可以带来更高的数据安全性,即数据持久性.Redis中提供了3种同步策略,即每秒同步,每修改同步和不同步.事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失,而每修改同步,可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中,可以预见,这种方式在效率上是最低的.
  2. 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容.
  3. 如果日志过大,Redis可以自动启动rewrite机制,即Redis以append模式不断的将修改数据写入到老的磁盘文件,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令别执行,一次在进行rewrite切换时可以更好的保证数据安全性
  4. AOF包含一个格式清晰,易于理解的日志文件用于记录所有的修改操作,事实上,也可以通过该文件完成数据的重建

劣势

  1. 对于相同数量的数据集而言,AOF文件通常要大于RDB文件
  2. 根据同步策略的不同,AOF在运行效率上往往会慢于RDB

配置说明

redis.conf配置文件
appendonly yes #开启AOF

策略选择

appendfsync always #每次有数据修改发生时都会写入AOF文件
appendfsync everysec #每秒钟同步一次,该策略为AOF默认策略
appendfsync no #从不同步,数据不会持久化

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值