redis7-03持久化

Docker 安装 Redis 3.2 说明: 1.docker安装在centos7中,版本为19.03.2。 2.个人安装记录。 Docker 安装 Redis 查找Docker Hub上的redis镜像 [root@localhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL ... 阅读详情

持久化

RDB持久化

概述

RDB,是指将内存中某一时刻的数据快照全量写入到指定的rdb文件的持久化技术。RDB持久化默认是开启的。当Redis启动时会自动读取RDB快照文件,将数据从硬盘载入到内存,以恢复Redis关机前的数据库状态

执行持久化

RDB持久化的执行有三种方式:手动save命令,手动bgsave命令,自动条件触发
使用lastsave命令可以查看最近一次持久化的时间,其返回一个unix时间戳

  • save命令
    • 通过在redis-cli客户端中执行save命令,可以进行一次持久化保存。save命令在执行期间会阻塞redis-server进程,直至持久化过程完毕。在redis-server进程阻塞期间,redis不能处理任何读写请求,无法对外提供服务
    • 这个同步命令可以看作是同步请求,在生产环境中一般不宜使用
  • bgsave命令
    • 通过在redis-cli客户端中执行bgsave命令,可以立即进行一次持久化保存。不同于save命令,该命令是在后台运行save。bgsave命令会使服务器进程redis-server生成一个子进程,由该子进程负责完成保存过程。在子进程进行保存过程中,不会阻塞redis-server进程对客户端读写请求的处理
  • 自动条件触发
    • 其本质上仍然是bgsave命令的执行,只不过是用户通过在配置文件中做出相应的设置后,redis会根据设置信息自动调用bgsave命令执行。

RDB优化配置

RDB相关配置在redis.conf的SNAPSHOTTING部分,官方文档及其详尽,自行翻译即可

  • 保存点设置
    • save 3600 1 300 100 60 10000 这里添加了3个保存点,表示在60s内修改1w次及以上、300s内修改100次及以上、3600s修改1次及以上就会执行bgsave命令
    • 保存点之间应该是递进的包含关系

RDB文件结构

  • SOF
    • 是一个常量,一个字符串REDIS,只包含这五个字符,其长度为5。用于表示RDB文件的开始,以便在加载RDB文件时可以快速判断该文件是否为RDB文件
  • rdb_version
    • 是一个整数,长度为4字节,表示RDB文件的版本号
  • databases
    • 是RDB文件中的数据部分,可以包含任意多个非空数据库,每个database由三部分构成
    • SODB
      • 是一个常量,占1字节,标识一个数据库开始
    • db_number
      • 数据库编号
    • key_value_pairs
      • 当前数据库中的键值对数据
      • 每个key_value_pairs由多个描述键值对的数据构成
      • VALUE_TYPE
        • 占1字节,标识该键值对中value的类型
      • EXPIRETIME_UNIT
        • 是一个常量,占1字节,用于标识过期时间的单位是秒还是毫秒
      • time
        • 当前键值对的过期时间
  • EOF
    • 是一个常量,占用1字节,用于标识RDB数据的结束,校验和的开始。
  • check_sum
    • 校验和check_sum用于判断RDB文件中的内容是否出现数据异常。其采用的是CRC校验算法
    • 在持久化时,先将SOF,rdb_version及内存数据库中的数据快照这三者的二进制数据拼接起来,形成一个二进制数,在使用这个数除以校验和check_sum,此时可获得一个余数,然后将该余数拼接到之前那个二进制数后面形成databases
    • 加载时,需要先用check_sum对RDB文件进行数据损坏验证。将RDB文件中除开EOF和check_sum以外的数据除以check_sum。若余数不为0则说明文件发生损坏,若为0不确定是否损坏

RDB持久化过程

对于redis默认的RDB持久化,在进行bgsave持久化时,redis-server进程会fork出一个bgsave子进程,由该子进程以异步方式负责完成持久化而在持久化过程中,redis-server进程不会阻塞,其会继续接收并处理用户的读写请求

由于子进程可以继承父进程所有资源,且父进程不能拒绝子进程的继承权。所以bgsave子进程由权读取到redis-server进程写入到内存中的用户数据,使得将内存数据持久化到dump.rdb成为可能。
bgsave子进程在持久化时首先会将内存中的全量数据copy到磁盘中的一个RDB临时文件,copy结束后,再将该文件rename为dump.rdb,替换掉原来的同名文件。
在持久化过程中,若redis-server进程接收到了用户写请求,则系统会将内存中发生数据修改的物理块copy出一个副本。等内存中的全量数据copy结束后,会再将副本中的数据copy到RDB临时文件。这个副本的生成是由于linux系统的写时复制技术实现的

AOF持久化

AOF,是指redis将每一次的写操作都以日志的形式记录到一个AOF文件中的持久化技术。当需要恢复内存数据时,将这些写操作重新执行一次,便会恢复到之前的内存数据状态。

AOF配置

AOF相关配置在redis.conf的APPEND ONLY MODE部分,要开启AOF需要将appendonly置为yes。同样的,官方给出的注释相当详尽,自行翻译即可理解。

AOF文件格式

在redis7中有三类多个AOF文件

  • 基本文件
    • 可以是RDF格式也可以是AOF格式。其存放的内容是由RDB转为AOF当时内存的快照数据。该文件可以有多个
  • 增量文件
    • 以操作日志形式记录转为AOF后的写入操作。该文件可以有多个
  • 清单文件
    • 用于维护AOF文件的创建顺序,保障激活时的应用顺序,该文件只有一个

增量文件扩展名为.aof,采用AOF格式。AOF格式其实就是redis通讯协议格式,AOF持久化文件的本质就是基于Redis通信协议的文本,将命令以纯文本的方式写入到文件中。
Redis协议规定,Reids文本是以行来划分,每行以\r\n行结束。每一行都有一个消息头,以标识消息类型。消息头由六种不同的符号表示

  • +表示一个正确的状态信息
  • -表示一个错误信息
  • *表示消息体总共有多少行,不包括当前行
  • $表示下一行消息数据的长度,不包括换行符长度\r\n
  • 表示一个消息数据
  • :表示返回一个数值

rewrite机制

简述

rewrite是对AOF文件进行重写整理。当rewrite开启后,主进程redis-server创建出一个子进程bgrewriteaof,由该子进程完成rewrite过程。其首先对现有aof文件进行rewrite计算,将计算结果写入到一个零食文件,写入完毕后,在rename该临时文件为原aof文件名,覆盖原有文件。

策略
  • 读操作命令不写入文件
  • 无效命令不写入文件
  • 过期数据不写入文件
  • 多条命令合并写入文件
  • (其实就是为了获得最终状态)

AOF优化配置

appendfsync

配置数据同步策略

  • always
    • 写操作命令写入aof_buf后会立即调用fsync()系统函数,将其追加到AOF文件。该策略效率低,但相对安全
  • no
    • 写操作命令写入aof_buf后什么也不做。而将aof_buf中的数据同步磁盘的操作由操作系统完成。linux系统默认同步周期为30s
  • everysec
    • 默认策略。写操作命令写入aof_buf后并不直接调用fsync(),而是每秒调用一次fsync()系统函数来完成同步
no-appendfsync-on-rewrite

刷新阈值

用于指定当AOF fsync策略设置为always或everysec,当主进程创建了子进程正在执行bgsave或bgrewriteaof时,主进程是否不调用fsync()来做数据同步。设置为no则主进程会调用fsync()做同步。yes则不会调用

若调用fsync(),在需要同步的数据量非常大时,会阻塞主进程对外提供服务,即会存在延迟问题。如果不调用fsync(),则AOF fsync策略相当于设置了no,可能会存在30s数据丢失风险

aof-rewrite-incremental-fsync

当bgrewriteaof在执行过程也是先将rewrite计算的结果写入到了aof_rewrite_buf缓存中,当缓存中的数据达到一定量后就会调用fsync()进行数据同步,将数据写入到临时文件。该属性用于控制fsync()每次同步的数据量最大不超过4MB,这样可以避免由于单次同步过大而引发的长时间阻塞

aof-timestamp-enabeld

时间戳注释

该属性设置为yes则会开启在AOF文件中增加时间戳的显示功能,可方便按照时间对数据进行恢复。但该方式可能会与AOF解析器不兼容,故默认值为no

aof-load-truncated

文件截断

当发现在加载aof文件出现错误,且错误在尾处时。若该属性设置为yes则会加载一个截断的aof文件,并且给用户报错。若设置为no则服务器会终止启动,用户需要再启动之前使用redis-check-aof工具进行修复

AOF持久化过程

  1. redis接收到的写操作命令并不是直接追加到磁盘的AOF文件的,而是将每一条写命令按照redis通讯协议格式暂时添加到AOF缓冲区aof_buf
  2. 根据设置的数据同步策略,当同步条件满足时,再将缓冲区中的数据一次性写入磁盘的AOF文件,以减少磁盘IO,提高性能
  3. 当磁盘的AOF文件大小达到了rewrit条件时,redis-server主进程会fork处一个子进程bgrewriteaof,由该子进程完成rewrite过程
  4. 子进程bgrewriteaof首先对该磁盘AOF文件进行rewrite计算,将计算结果写入到一个零食文件,全部写入完毕后,再rename该临时文件为磁盘文件的原名称,覆盖原文件。
  5. 如果再rewrite过程中又有写操作命令追加,那么这些数据会暂时写入aof_rewrite_buf缓冲区。等将全部rewrite计算结果写入临时文件后,会先将aof_rewrite_buf缓冲区中的数据写入临时文件,然后再rename为磁盘文件的原名称,覆盖原文件。

RDB与AOF对比

  • RDB
    • rdb文件较小,数据恢复快
    • 数据安全性较差,写时复制会降低性能,rdb文件可读性差
  • AOF
    • 数据安全性高,可读性强
    • aof文件较大,写操作会影响性能,数据恢复较慢

官方推荐使用RDB与AOF混合式持久化,若对数据安全性不高,则推荐使用纯RDB持久化方式。不推荐使用纯AOF持久化方式。若只是用于缓存,则无需使用持久化

从CentOS到openEuler:Java+MySQL+Redis+Nginx全栈环境迁移实战 Linux服务器运维中,系统迁移是一项常见但高风险的任务。当CentOS停止维护,选择稳定且兼容的替代发行版成为关键。openEuler作为面向服务器场景的Linux发行版,采用RPM和systemd体系,可与原有环境无缝衔接。迁移的核心在于将Java、MySQL、Redis、Nginx等组件完整复刻,并确保网络、安全、数据持久化等配置正确。以openEuler 24.03 LTS为实操平台,从系统安装、静态IP配置、密码重置,到JDK多版本切换、MySQL8初始化、Redis主从复制、Nginx反向代理, 阅读详情

相关推荐

Redis持久化选型指南:从电商秒杀到物联网场景的7种配置方案

本文深入探讨Redis持久化策略在电商秒杀、物联网、金融等7大业务场景下的最优配置方案。通过分析RDB和AOF的16种组合策略,提供针对高并发写入、海量设备数据、金融交易等场景的黄金参数配置与性能优化技巧,帮助开发者实现数据可靠性与系统性能的最佳平衡。

weixin_28331555的博客 387

Redis7【③ 持久化 Persistent】

Redis7【③ 持久化 Persistent】

weixin_44981126的博客 683

Verilog单周期CPU设计(超详细)

实验 单周期CPU一、设计目的与目标实验内容实验要求二、课程设计器材硬件平台软件平台三、 CPU逻辑设计总体方案指令模块MIPS指令格式指令处理流程数据通路总体结构图设计流程逻辑图四、模块详细设计PCAdd4PCINSTMEMDATAMEMSHIFTER32_L2SHIFTER_COMBINATIONMUX4X32MUX2X5EXT16T32MUX2X32CONUNITREGFILEALUSing...

Ace Cheney的博客 9万+

Redis7 实现持久化的三种方式

Redis提供了三种持久化方式,分别是RDB(Redis DataBase)持久化、AOF(Append Only File)持久化和混合持久化。RDB持久化:RDB持久化生成的快照文件是一个紧凑压缩的二进制文件,占用空间较小,适用于备份和全量复制等场景。同时,由于快照文件是完整的数据备份,因此恢复速度较快。但是,RDB持久化可能存在数据丢失的风险,因为它只保存了某个时间点的数据快照,无法记录数据的变化过程。

qq_45515182的博客 1505

Android音频学习(八)——AudioFlinger线程

在 PlaybackThread 的实现中,Flag 用于标识线程的特殊行为或配置。

miemie2014的博客 1398

匈牙利算法解决指派问题清晰流程

匈牙利算法解决指派问题清晰流程 百度词条上,指派问题(Assignment problem)是这么定义的:在满足特定指派要求条件下,使指派方案总体效果最佳。如:有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包:有若干班级需要安排在若干教室里上课等。   一、做减法(归约): 行归约:每行元素减去该行最小元素。 列归约:每行元素减去该行最小元素。

siss0siss的博客 6万+

最新Redis7持久化(权威出版)

运用官方权威文档,并且用简洁的语言来描述Redis7和Redis7之前的各种关于持久化的操作方法,以及面试常见场景,看这一篇就完全够用!!!

loss_rose777的博客 4万+

【openEuler容器镜像部署指南】

【代码】【List集合排序 】

weixin_43878094的博客 1111

Redis6 系列八 Redis持久化之RDB&AOF

1.Redis持久化之RDB 1.1.总体介绍 官网介绍:http://www.redis.io Redis提供了2个不同形式的持久化方式。 RDB(Redis DataBase) AOF(Append Of File) RDB(Redis DataBase) 官网介绍 1.2.2.是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照...

qq_32265203的博客 293

理想汽车智驾方案介绍 4 World model + 强化学习重建自动驾驶交互环境

本帖将以 DrivingSphere 为例来解析这个过程。

地平线开发者 1920

必知必会:DeepSeek-R1训练流程详解

必知必会:DeepSeek-R1训练流程详解

丨汀、的博客 287

Redis7持久化

Redis7持久化-->RDB和AOP

不更了,主打一个陪伴 2万+

【WRFDA第三期】OBSPROC namelist 变量总结

OBSPROC namelist 变量总结

WW、forever的博客 1119

openEuler 24.03 LTS部署实践:CentOS迁移至Java/MySQL/Redis/Nginx

操作系统作为IT基础设施的底座,其生命周期与生态兼容性直接影响生产环境的稳定性。在CentOS停服背景下,选择一款具备长期维护保障的替代系统成为企业迁移的关键。openEuler 24.03 LTS凭借多版本支持和RPM生态兼容性,可平滑承接原有部署习惯。本文从实际工程视角出发,系统梳理在openEuler上从零部署Java运行环境、MySQL数据库、Redis缓存与Nginx反向代理的完整流程,涵盖系统初始化、组件安装调优、故障排查等关键环节,为迁移及全栈环境搭建提供可落地的操作参考。

weixin_32822843的博客 242

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

redis03持久化

redis持久化

weixin_47790139的博客 720

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Redis-03】持久化方案

Redis持久化技术解析:RDB与AOF机制对比 Redis提供RDB和AOF两种持久化方案。RDB通过内存快照实现高效恢复,二进制压缩格式使其空间占用仅为内存的1/4~1/2,但存在数据丢失风险(默认可能丢失5-15分钟数据)和fork操作的内存瓶颈。AOF采用日志记录所有写操作,提供appendfsync策略可选(always/everysec/no),在always模式下可实现零数据丢失,但会导致文件膨胀且恢复速度较慢。AOF重写机制通过创建子进程压缩日志,解决了文件过大的问题。两种机制各有优劣,RD

weixin_39911996的博客 846

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis持久化

这里我做了一些简单的翻译这里我对重点内容做了一些简单的翻译RDB(Redis 数据库):RDB持久化以指定的时间间隔执行数据集的时间点快照。

分享思想,留下痕迹。 668

尚硅谷redis7 03-05 redis能干嘛

1.硬件:mysql的存储空间在硬盘,为了提高查询效率,redis的存储空间位于内存。2.查询:mysql的查询通过检索关键字进行条件过滤,因此redis应用key-value结构存储【这样查的快】。3.关系的处理:mysql查得慢也许是因为主键和外键的约束,因此redis没有这些约束。此后的查询中,在查询mysql之前,先访问redis。若在redis中访问不到,再去访问mysql,然后再把mysql中查询的数据写入redis。

feiyinjiu的博客 756

Redis持久化RDB/AOF

同时,为了便于AOF备份和拷贝,将所有的AOF文件和manifest文件放入一个单独的文件目录中,目录名由appenddirname配置决定(文件路径为前文rdb配置的 dir + appenddirname)。AOF(Append Only File):以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启后就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

qq_51578257的博客 1221

Redis的持久化操作

目录RDB(Redis DataBase)1. 官网介绍2. RDB的定义3. 备份是如何执行的4. Fork5. RDB持久化流程6. rdb文件7. 文件保存位置8. 如何触发RDB快照9. stop-writes-on-bgsave-error10. rdbcompression 压缩文件11. rdbchecksum 检查完整性12. rdb的备份及恢复13. RDB的优劣势14. 总结AOF(Append Of File)1. AOF的定义2. AOF持久化流程3. AOF默认不开启4. AOF和

程序园@大Null 715

Redis高可用之持久化

1.Redis复制的原理和优化 1.1 Redis单机的问题 1.1.1 机器故障 在一台服务器上部署一个Redis节点,如果机器发生主板损坏,硬盘损坏等问题,不能在短时间修复完成,就不能处理Redis操作了,这就是单机可能存在的问题 同样的,服务器正常运行,但是Redis主进程发生宕机事件,此时只需要重启Redis就可以了。如果不考虑在Redis重启期间的性能损失,可以考虑Redis的单机部署 Redis单机部署出现故障时,把Redis迁移到另一台服务器上,此时需要把发生故障的Redis中的数据同步到新部

qq_40907977的博客 1035

CentOS7使用Docker安装Redis图文教程

CentOS7安装Redis图文教程 官网查看Redis最新版本 Redis官网 此时Redis最新版本为6.0.8 Docker安装Redis 获取redis镜像 此处是获取最新redis镜像 docker pull redis 此处指定了redis镜像版本 docker pull redis:6.0.8 查看redis镜像是否下载成功 docker images 配置redis 官网下载配置文件redis.conf 修改启动默认配置 bind 127.0.0.1 #注释掉

命硬的博客 3638

[Redis入门到精通day03]redis配置、持久化及事务详解

Redis入门到精通day03 一、解析配置文件 1.通用配置 #是否设置为守护模式yes/no daemonize yes #设置进程锁文件 pidfile /usr/local/redis/redis.pid #设置端口 port 6379 #TCP 监听的最大容纳数量,默认511 tcp-backlog 511 #客户端超时时间默认为0永不超时 timeout 0 bind #心跳检测,默认值为0 tcp-keepalive #日志级别,debug(测试开发阶段)

叶落雨飘的博客 271

Redis 持久化

官网RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。1. 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作2. 默认情况下,redis是没有开启AOF(append only file)的开启AOF功能需要设置配置: appendonly yes1. 问题可否共存。

qq_43085588的博客 568
上一篇: redis7--02数据类型及其常用命令
下一篇: redis--04主从集群
sisyphoslee
博客等级 码龄7年 942粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值