八.Redis持久化

八.持久化

在运行过程中,redis是将数据保存在内存中

如果没有使用持久化,当服务器关闭之后,内存中的数据会被清空

为了让这些数据在服务器重启之后依然可用

redis提供了两种持久化方式

1.RDB

1-1 什么是RDB

Redis Database

将数据的快照以二进制的方式保存在硬盘中

在指定的时间间隔内,将内存中的数据快照保存到磁盘中

后面的数据快照会将前面锁保留的数据快照覆盖

RDB文件是一个以*.rdb结尾的文件,默认为dump.rdb

当服务器重启之后,自动读取所保存的快照文件

将快照文件中的数据恢复到内存中

如果在启动之后,RDB文件被删除,则启动之后,数据库中数据全部丢失

1-2 快照文件的保存时间间隔
################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""
#在900秒范围内,发生了一次变化
save 900 1
#在300秒范围内,发生了10次变化
save 300 10
#在60秒范围内,发生了10000次变化
save 60 10000
1-3 如何恢复数据

根据配置文件中所配置的rdb文件名

# The filename where to dump the DB
#配置rdb文件是谁,默认为dump.rdb
dbfilename dump.rdb

将对应的rdb文件存放到src目录下

当服务器启动时,会自动读取配置文件中所指定的rdb文件

将该文件中的数据恢复到数据库中

1-4 如何生成快照文件
  • 自动
    • 根据在配置文件中所配置的时间间隔自动生成rdb文件
  • 手动
    • 通过调用命令,立刻生成当前的快照
1-5 命令
  • save
    • 直接在当前进程中调用save命令
    • 此时会阻塞当前的主进程
    • 阻塞一直到数据保存完成为止
    • 在主进程阻塞的期间,服务器不能处理任何一个客户端的请求
    • 是一个同步的操作
    • 优点
      • 不会额外的消耗内存
    • 缺点
      • 阻塞主进程,阻塞客户端命令,执行效率低
  • bgsave
    • fork出一个子进程
    • 由子进程进行调用保存命令,生成对应的快照文件
    • 保存完成之后,会发送信号告诉主进程保存已经完成
    • 由于保存操作是在子进程中执行的
    • 因此它不会阻塞到主进程的操作
    • 优点:
      • 不会阻塞到主进程的任何操作
    • 缺点:
      • 由于子进程复制了一个与主进程完全一致的进程
      • 那么会额外的消耗大量的内容
      • 服务器的压力会变的很大
  • fork
    • 其实就是一个复制的操作
    • fork的作用就是复制一份与当前一模一样的进程作为当前的子进程
    • 子进程中所有的信息都与主进程完全的一致
    • 相当的消耗内存
1-6 优缺点
  • 优点
    • 适合大规模的数据的恢复
    • 对于数据的完整性与一致性的要求没有那么严格
  • 缺点
    • 在一定的时间间隔内会做一次备份
      • 该备份会将原有文件替换调用
      • 如果在替换过程中出现了意外
      • 会导致数据的丢失
    • 如果进行fork
      • 会将内存中国的数据拷贝一份
      • 此时非常的消耗内存
      • 增大服务器的压力

2.AOF

2-1 什么是AOF

以文本的方式,将所有对于数据执行的写入操作的命令记录下来

将其记录到对应的AOF文件中

以此到达保存数据的目录

以日志的形式记录每次执行写入操作的命令

每一次都会在原有的内容基础上追加新的操作

2-2 开启AOF

默认情况下,redis使用的RDB方式进行持久化

如何开启AOF

打开配置文件,找到APPEND ONLY MODE相关配置

  • appendonly

    • 表示使用启用AOF进行持久化
    • 默认值为no表示不起用
    • 将其改为yes表示启用
  • appendfilename

    • 配置AOF持久化的文件名
    • 默认为:appendonly.aof
  • appendfsync

    • 配置AOF的保存模式,值有三种
    • always
      • 表示每一次运行写入命令都会将该命令写入到文件中
      • 每执行一个命令,保存一次
    • everysec
      • 默认值
      • 每一秒同步一次数据
      • 保存操作是由子进程执行
    • no
      • 本身自己是不执行保存操作
      • 等操作系统做数据缓存的同时进行同步的保存
      • 会阻塞主进程
2-3 去除冗余文件
  • auto-aof-rewrite-percentage 100
    • 当目前的AOF文件超过了上次重写的文件的百分之多少的时候,会进行重写
  • auto-aof-rewrite-min-size 64mb
    • 限制了允许重写的AOF的文件的最小需要多大
2-4 优缺点
  • 优点
    • AOF保存文件的操作是一个追加操作
    • 不存在数据丢失的风险
  • 缺点
    • AOF文件中存在着大量的冗余数据
    • 非常的消耗内存
    • 且运行效率是远远的低于RDB的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值