首页 > 数据库 >redis的两种持久化方式

redis的两种持久化方式

时间:2022-10-06 15:44:23浏览次数:83  
标签:AOF 两种 持久 文件 触发 redis RDB 重写

redis的两种持久化方式

redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要redis持久化

redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制

redis提供两种持久化机制:

  • RDB:存储数据结果,关注点在数据
  • AOF:存储操作过程,关注点在数据的操作过程

RDB(Redis DataBase)

在指定的时间间隔内将内存中的数据集写入磁盘,也就是快照(Snapshot),数据恢复是将快照文件直接读到内存中

redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入一个到一个临时文件(dump.rdb)中,待持久化过程结束后,再用本次的临时文件替换上次持久化后的文件。

fork函数的作用是复制一个与当前进程一样的进程,新进程的所有数据数值都和原进程一致,但是一个全新的进程,并作为原进程的子进程。

redis服务器在处理bgsave采用子线程进行IO写入,而主进程仍然可以接收其他请求,但创建子进程是同步阻塞的,此时不接受其他请求。

RDB的触发方式

  • 手动触发:通过命令手动生成快照
  • 自动触发:通过配置参数的设置触发自动生成快照

1.手动触发

执行save和bgsave命令,手动触发快照,生成RDB文件

save: 该命令会阻塞当前redis服务器,执行save命令期间,redis不能处理其他命令,直到RDB过程结束为止(会造成长时间阻塞,不建议使用)
bgsave:该命令执行后,redis会在后台异步进行快照操作,快照同时还可以响应客户端的请求,阻塞只发生在fork阶段,基本上redis内部的所有RDB操作都是采用bgsave命令

2.自动触发

  1. redis.conf配置文件中达到save参数的条件,自动触发bgsave

  1. 主从复制时,从节点要从主节点进行全量复制时也会触发bgsave,生成快照发送到从节点
  2. 执行shutdown(关闭redis服务),会触发bgsave
  3. 执行flushall(生成一个空的临时文件dump.rdb)

RDB的数据恢复

将备份文件(dump.rdb)移动到redis路径下(可以配置文件的存放路径)启动服务即可,redis启动会将文件数据加载到内存,在此期间redis会处于阻塞状态,直到全部数据存入内存。

RDB的优缺点

优点:

  • 数据恢复快
  • 体积小
  • 数据备份使用子进程,对redis服务性能影响小

缺点:

  • 在一定时间间隔进行备份,当redis意外宕机,将会丢失最后一次修改的数据,无法做到秒级持久化
  • fork进程时,会占用一定的内存空间
  • RDB文件是二进制的没有可读性

AOF(Append Only File)

将客户端的每一个写操作命令以日志的形式记录下来,追加到appendonly.aof的文件末尾,在redis服务器重启时,会加载aof文件中的所有命令,来达到数据恢复的目的

当有写命令请求时,会追加到AOF缓冲区内,AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作同步到磁盘的AOF文件中,当AOF文件大小超过重写策略或手动重写时,会对AOF文件进行重写来压缩AOF文件容量,redis服务重启时,会重新加载AOF文件中的写操作来进行数据恢复

AOF的触发方式

1.手动触发

通过bgrewriteaof命令:重新AOF持久化生成aof文件(触发重写)

2.自动触发

默认情况,redis是没有开启AOF(默认使用RDB持久化),需要通过配置文件开启

AOF的持久化策略有三种:
always: 把每个写命令立即同步到AOF文件,很慢但安全
everysec: 每秒同步一次,默认配置
no: redis不执行写入磁盘,交给OS系统处理,很快但不安全

AOF重写机制

AOF持久化,会把每次写命令都追加到appendonly.aof文件中,当文件过大,redis的数据恢复时间就会变长,因此加入重写策略对aof文件进行重写,生成一个恢复当前数据的最少命令集。

eg:
比如对同一个key进行多次写命令
set key 5
incr key
incrby key 500
重写后就变为 set key 506

手动触发可以使用bgrewriteaof命令

自动触发通过配置文件配置

重写流程

主进程fork出一个子进程进行AOF文件的重写,子进程重写完毕后,主进程把子进程重写期间,其他客户端产生的写请求,追加到AOF文件中,替换旧文件

AOF的rewirte重写和RDB的bgsave都是由父进程fork出一个子进程来执行的
重写是直接把当前内存的数据生成对应的命令,而不是读取旧AOF文件进行命令合并

AOF的优缺点

优点:

  • 数据安全性高,不易丢数据
  • AOF文件有序保存了所有写操作,可读性强

缺点:

  • AOF方式生成文件体积大
  • 数据恢复速度比RDB慢

参考

https://blog.csdn.net/m0_43424329/article/details/124364120

https://blog.csdn.net/w15558056319/article/details/121421463

标签:AOF,两种,持久,文件,触发,redis,RDB,重写
From: https://www.cnblogs.com/shenStudy/p/16757742.html

相关文章

  • Redis 3.2 集群搭建
     Redis3.0版本之后支持Cluster.这里安装3.2版本1、下载安装包cd/usr/local/wgethttp://download.redis.io/releases/redis-3.2.1.tar.gztar-zxvf/redis-3.2.1.tar.gz2......
  • Redis之持久化存储
    Redis持久化解决方案RDBRDB存储的重点在于数据本身,将数据持久化存入后缀为.rdb的文件中,即快照,每隔一段时间记录新的数据,像快速拍照一样,每次拍完放在一边,用的时候快速......
  • Redis的五种基本结构
    Stirng类型操作成功返回大于0的数或Integer1操作失败Integer0nil为空基本指令1.添加一组键值对setnameJoshua2.根据key获取value>getname"Joshua"3.key删......
  • P3834 【模板】可持久化线段树 2
    P3834主席树模板,求区间第k小。1#include<bits/stdc++.h>2usingnamespacestd;3#definelctr[i].ch[0]4#definerctr[i].ch[1]5#defineLctr[j].ch[0......
  • 004-Redis 的 Generic 命令组
    1.Generic1.1copy1.1.1基本信息COPYsourcedestination[DBdestination-db][REPLACE]summary:Copyakeysince:6.2.0Thiscommandcopiesthevaluestored......
  • 005-Redis的 Hash 命令组
    1.Hash1.1hdel1.1.1基本信息HDELkeyfield[field...]summary:Deleteoneormorehashfieldssince:2.0.0Removesthespecifiedfieldsfromthehashstor......
  • redis.conf 文件参数说明
    #不区分大小写#unitsarecaseinsensitiveso1GB1Gb1gBareallthesame.#include组合多个配置问题#include/path/to/local.conf#include/path/to/other......
  • NoSQL之Redis配置与优化
    NoSQL之Redis配置与优化一、关系数据库和非关系数据库1.关系型数据库●关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。●主要......
  • Redis常用数据类型以及操作
    Redis常用数据类型以及操作一、String数据类型String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对......
  • Redis高可用(持久化、主从复制、哨兵、集群)
    Redis高可用(持久化、主从复制、哨兵、集群)一、Redis高可用1.Redis高可用概述在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常......