博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入学习Redis(四) redis持久化
阅读量:5745 次
发布时间:2019-06-18

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

redis是一个内存数据库,所有数据存储在内存中,一旦redis服务器进程退出,则所有数据将会丢失。为了避免发生这种情况,需要对redis中的数据进行定期的持久化。

redis中包含两种持久化方法:RDB持久化和AOF持久化

一、RDB持久化

RDB持久化是将数据库状态保存在一个压缩的二进制RDB文件中。有两个命令可以触发RDB持久化:SAVE和BGSAVE,其中save命令是阻塞主线程进行数据库状态的保存,而bgsave命令是在当前redis进程的基础上fork出一个子进程,在子进程中进行持久化操作,而父进程可以正常处理redis客户端的命令,整个命令阻塞主线程的点是fork子进程时。

1、RDB持久化的优势与劣势

优势:

  • 文件采用压缩的二进制文件,在服务求重新加载数据时,耗时更少

劣势:

  • rdb持久化时,会导致整个服务器的CPU飙升
  • 无法做到实时持久化,使用该持久化会丢失很大一部分数据

2、自动备份

可以通过修改配置项来进行自动RDB持久化,配置项为save m n,意思是在m秒内对数据库进行了n次修改。进行检查的定时任务包含在serverCron中,默认100ms执行一次

3、bgsave命令执行过程

  • 执行bgsave命令,服务器父进程判断是否有其他子进程存在,如果存在则直接返回
  • redis父进程fork出一个子进程
  • fork完成后,父进程继续处理其他命令,子进程进行RDB文件的保存。
  • 备份完毕,发送信号给父进程

二、AOF持久化

AOF持久化的更新频率比RDB的高,所以如果redis开启了AOF持久化,则优先启用AOF文件进行数据reload,只有在未开启AOF持久化时,才会使用RDB

1、AOF持久化的过程

AOF持久化是通过保存redis服务器所执行的写命令来记录数据库状态。,其主要分为三个主鸭子步骤

  • 命令追加:服务器在执行完一个写命令后,会以协议格式将被执行的命令追加到服务器状态aof_buf属性的末尾
  • 文件写入 调用系统write命令将aof_buf缓冲区内容写入内存缓冲区
  • 文件同步 将内存缓冲区内容同步到硬盘中

其中包含三种同步策略,通过appendfsync配置项控制

  • always 将aof_buf缓冲区的所有内容写入并同步到AOF文件
  • everysec 将aof_buf缓冲区的内容写入到AOF文件,如果上次同步AOF文件的时间距离现在超过了1s,则再次对AOF文件进行同步,这个同步操作由一个线程专门负责
  • no 只写入,不同步

2、AOF重写

随着服务器运行的时间,AOF文件会越来越大,需要定期对AOF文件中的命令进行整合,以减小AOF文件的大小。

AOF重写流程

  • redis进程fork出子进行执行重写操作
  • 子进程通过当前的数据库状态进行命令的重写
  • 此时redis父进程如果发生写操作,则将写操作写入AOF重写缓冲区
  • 子进程重写完成,发送信号给父进程
  • 父进程将AOF重写缓冲去内容合并到新的AOF文件中,然后原子的替换掉原来的AOF文件

三、混合持久化

这是redis4.0之后提供的功能,顾名思义,是将RDB和AOF持久化混合使用,这是由于

  • RDB 持久化能够快速地恢复数据, 但是在服务器意外停机时会丢失大量数据;
  • AOF 持久化能够有效地提高数据的安全性, 但是在恢复数据时却要耗费大量的时间。

这种持久化是在AOF重写时,创建一个包含数据库状态的AOF文件,文件开头是当前的数据库状态的RDB数据,重写之后的数据则以AOF文件格式追加到文件末尾

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

你可能感兴趣的文章
VisualC++2012 Compiler Warning C4566
查看>>
Edit Distance -- LeetCode
查看>>
BASH_SUBSHELL 变量不生效的情况
查看>>
Flume 1.5.0简单部署试用
查看>>
使用adb 查询data/data下的数据库
查看>>
设计模式之工厂模式
查看>>
Linux 性能优化工具 perf top
查看>>
C#集合u
查看>>
SAP 金税接口代码 供参考
查看>>
类的方法类型——构造方法
查看>>
【转】关于onActivityResult方法不执行的问题汇总
查看>>
ubuntu防火墙命令初探
查看>>
数据结构——算法之(032)(求两个串中的第一个最长子串)
查看>>
javascript Dictionary data structures
查看>>
BZOJ 1449 JSOI2009 球队收益 费用流
查看>>
html有序列表和无序列表
查看>>
uva 1510 - Neon Sign(计数)
查看>>
微信的redirect_uri参数错误解决办法
查看>>
(转)ashx 使用Session
查看>>
C#日期格式化
查看>>