博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis学习(三):RDB与AOF
阅读量:3899 次
发布时间:2019-05-23

本文共 2395 字,大约阅读时间需要 7 分钟。

文章目录

  • 持久化是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命令。
  • 可根据实际情况具体修改其参数,不过体积越大,还原时间越长。

转载地址:http://lxden.baihongyu.com/

你可能感兴趣的文章
theano 后端爆内存
查看>>
os.environ 和 keras.json
查看>>
后台面试经典问题-手写LRU算法
查看>>
Part-Guided Attention Learning for Vehicle Instance Retrieval
查看>>
Deep Residual Learning for Image Recognition
查看>>
Bag of Tricks and A Strong Baseline for Deep Person Re-identification
查看>>
vue+flask实现视频目标检测yolov5
查看>>
关于BigInteger
查看>>
UIScrollView不能响应UITouch事件
查看>>
iOS TextFiled 文本密码切换 光标偏移解决
查看>>
iOS 当前应用所占内存和设备可用内存
查看>>
iOS 文件属性
查看>>
UIView的layoutSubviews和drawRect方法何时调用
查看>>
iOS GCD多线程下载原理
查看>>
NSData全部API解释
查看>>
iOS 侧滑菜单封装Demo(类似QQ侧滑效果)
查看>>
Spring学习(二)
查看>>
Spring学习(三)
查看>>
Spring学习(四)
查看>>
java解惑——易错知识点归纳总结
查看>>