Redis学习(三):RDB与AOF

本文深入探讨Redis的两种持久化策略:RDB和AOF。RDB通过快照保存数据,而AOF则记录每条写命令。文章详细介绍了如何生成RDB快照,包括默认配置、命令创建和主从复制过程,以及AOF的同步频率和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 持久化是Redis一个重要的功能点,可以有效的避免服务器因为停电,断网等多种因素导致Redis崩溃后,及时恢复有效数据。
  • Redsi分为俩种持久化策略,RDBAOF
  • 俩种持久化策略可单独配置,也可同时存在。
    • 如果只配置 AOF ,重启时加载 AOF文件恢复数据;
    • 如果同时配置了 RDBAOF ,启动是只加载 AOF 文件恢复数据;
    • 如果只配置 RDB,启动是将加载 dump 文件恢复数据。

RDB

  1. RDB,也被称为快照。它可以将某一时刻的所有数据都写入硬盘。比如快照在8点5分创建成功,8点10分创建下次快照,如果在10分的快照没有创建成功就崩溃,则丢失8点5分之后所有的数据。

如何生成RDB

默认配置
  • 在Redis的配置文件Redis.conf有如下配置
//满足任何一个条件,自动建立快照
save 900 1  //900 秒(15 分钟)如果至少更改了 1 个密钥
save 300 10  //300 秒(5 分钟)后,如果至少更改了 10 个密钥
save 60 10000 //如果至少更改了 10000 个密钥,则 60 秒后

在该配置下创建的快照,调用的命令是BGSAVE

使用命令创建
  • BGSAVE
    • 会调用fork来创建一个子进程,然后子进程负责将快照写入磁盘,而父进程继续处理命令请求。
    • 存在因为创建子进程而导致的进程问题和内存占用问题。
  • SAVE
    • 采用此命令的话,则redis在快照未创建完成前,不会接受其他命令,该命令并不常用,生产环境慎用,一般只有无法直接BGSAVE(比如服务器内存不够,无法支持创建子进程)或者等待快照创建完成也无妨才会使用。
  • SHUTDOWN
    • 此命令是关闭服务器,如果执行此命令,会调用SAVE来创建快照。阻塞客户端,不再执行客户端发送的所有命令,在SAVE执行完毕后,关闭服务器。
主从复制
  • 当一个Redis连接另外一个Redis,并向对方发送SYNC来开始一次复制操作,如果主服务器目前没有在执行BGSAVE,或者主服务器并非刚刚执行完BGSAVE,那么主服务器就会执行BGSAVE
RDB生成文件的位置及使用
  • 查看Redisredis.conf配置文件

    dbfilename dump.rdb //dump.rdb可自由重命名
    dir ./   //./可修改文件保存位置
    
  • 使用只需要将RDB文件放到Redis安装目录下,重新启动服务器即可。

    1.访问redis根目录    cd  /user/local/redsi       //redis的安装目录
    2.登录redis:redis-cli -h 127.0.0.1 -p 6379     //也可以直接使用客户端来连接 
    3.查看所有key值:keys * //如果没有数据的话可以自己添加些
    4.使用生成快照命令:SAVE //返回ok之后,把redis目录下的dump.rdb文件先复制到别处
    5.清空整个 Redis 服务器的数据:flushall  //执行完之后,发现redis中没有数据
    6.还原数据,把dump.rdb再放回安装目录,redis服务器重启:
        如果Redis已经配置为service服务,可以通过以下方式重启:
        service redis restart
        如果Redis没有配置为service服务,可以通过以下方式重启:
        /usr/local/bin/redis-cli shutdown
        /usr/local/bin/redis-server /etc/redis.conf
    
    

注意事项

  • 只是用RDB来进行持久化数据,如果Redis崩溃,系统将会丢失最近一次快照生成之后的所有数据。

AOF

  • 只追加文件,它会在执行写命令的时候,将被执行的写命令复制到硬盘里面。Redis只需要从头到尾执行一次AOF所包含的所有写命令,就可以恢复AOF文件所记录的数据集。

  • AOF默认是关闭的,可以通过redis.conf来打开。

    appendonly no //yes为打开
    
  • 如何使用同RDB一样,放到对应目录,然后重启服务。

同步频率

  • redis.confappendfsync来控制同步频率。

    # appendfsync always //每个redis都要执行写命令同步,严重降低redis的速度。
    appendfsync everysec //每秒执行一次同步,显示的将多个写命令同步到磁盘
    # appendfsync no //让操作系统来决定何时执行同步
    
    • always都被写入磁盘,从而系统崩溃导致的数据丢失减少降到最少,但对硬盘大量吸入,降低redis的速度,且硬盘是固态的话,还会降低硬盘寿命。
    • everysec使用的最多,即使发生崩溃,也最多丢失1秒的数据。
    • no无法把控,这会导致系统崩溃,丢失不定量的数据。

注意事项

  • AOF文件随着Rdis的不断运行,AOF文件的体积也在不断增长,极端情况下可能会用完硬盘所有的可用空间,另外一方面,AOF文件体积的不断增长,日后还原数据,执行文件的时间也就越长。

    • BGREWRITEAOF

      • 该命令会移除AOF文件中冗余的命令来重写AOF文件,尽可能的降低其体积大小。
      • 工作原理类似于BGSAVE,会fork一个子进程,然后由子进程来对AOF文件进行重写。
      • 同样存在因为创建子进程而导致的进程问题和内存占用问题。
    • Redis.conf相关配置

      auto-aof-rewrite-percentage 100 
      auto-aof-rewrite-min-size 64mb
      
      • 在启用AOF持久化的时候,如果AOF文件的体积比上一次重写的体积大了100%并且大于了64MB,就会执行BGREWRITEAOF命令。
  • 可根据实际情况具体修改其参数,不过体积越大,还原时间越长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值