大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点

简介: 大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (正在更新…)

章节内容

上节完成了的内容如下:


Redis 持久化原因

Redis 持久化机制 RDB AOF

基础概念、适用场景等

RDB

RDB(Redis DataBase),是Redis的默认存储方式,RDB是通过快照的方式(snapshotting)完成的。

触发方式

  • 符合自定义配置的快照规则
  • 执行 save 或 bgsave 命令
  • 执行 flushall 命令
  • 执行主从复制操作(第一次)

配置参数

redis.conf 中配置:save

save "" # 不使用RDB存储
save 900 1 # 900秒(15分钟)至少1个键修改则保存
save 300 10 # 300秒(5分钟)至少10个键修改则保存

显式触发

bgsave

执行流程

Redis 父进程判断:当前是否在执行 Save、bgsave、bgrewriteaof等等指令的子进程,如果在执行则bgsave命令直接返回

父进程执行fork操作创建子进程,这个过程中父进程是要进行阻塞的,Redis此时不能执行来自客户端的任何命令。

父进程fork后,bgsave命令返回 “Background saving started”信息并不再阻塞父进程,并可以响应其他命令。

子进程创建RDB文件,根据父进程内存快照生成临时文件,完成对原有文件进行原子替换。

子进程发送信号给父进程表示完成,父进程更新统计信息。

父进程Fork结束后,继续工作。

文件结构

  • 头部 5字节固定位 REDIS
  • 4字节 RDB 版本号
  • 辅助字段 以 KEY-VALUE
  • 存储数据库号码
  • 字典大小
  • 过期 KEY
  • 主要数据 以 KEY-VALUE
  • 结束标志
  • 校验和,看文件是否存坏,是否被修改

RDB优点

RDB是二进制压缩文件,占用空间小,便于传输

主进程Fork子进程,可以最大化Redis性能,主进程不能够太大,否则会导致阻塞

RDB缺点

不保证数据的完整性,会丢失最后一次快照以后的数据

AOF

AOF(append only file)是Redis的另一种持久化方式,Redis默认情况下是不开启的。

Redis 将所有对数据库进行写入命令记录到AOF文件中,这样 Redis 重启后按顺序执行这些指令即可恢复。

AOF 会记录过程,RDB 是保存结果。


配置参数

同样,我们修改 redis.conf

# 参数开启 AOF
appendonly yes
# AOF的位置
dir ./
# 默认文件名
appendfilename appendonly.conf

具体原理

AOF 文件中存储的 Redis 的指令,具体过程有三个阶段:


命令传播:Redis 将执行完的命令、参数等发送到 AOF 程序中

缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议格式,再追加到服务器的AOF缓存中。

文件写入保存: AOF 缓存中的内容会被写入到 AOF 文件末尾,如果设定的AOF保存条件被满足的话,fsync函数或者fdatasync函数会被调用,写入的内容被真正的保存到磁盘中

保存方式

可以配置保存的方式如下:


AOF_FSYNC_NO 不保存

AOF_FSYNC_EVERYSEC 每一秒钟保存一次 (默认)

AOF_FSYNC_ALWAYS 每一个指令保存一次

AOF 瘦身

平常会遇到如下的场景

set name wzk
set name kangkang # 此时 保存 set name wzk 是没有意义的
set age 13

或者是这种场景

lpush list 1 2 3
lpush list 4 5 6
# 这种优化完可以变成: lpush 1 2 3 4 5 6

Redis 不希望 AOF 重写造成服务器无法处理请求,所以 Redis 决定将 AOF 重写程序放入到后台中:


子进程AOF重写期间,主进程可以继续处理请求

子进程带有主进程的发数据副本,使用子进程

不过使用子进程也有一个问题:

因为子进程在进行AOF重写期间,主进程还需要继续处理命令,而新的命令可能会对现有的数据进行修改,这会让当前数据库的数据和重写后的AOF文件中的数据不一致。

为了解决不一致的问题,Redis 加了一个 AOF 缓存,这个缓存在Fork出子进程之后,Redis主进程接收到新的写命令时,除了会将这个命令追加到现有的AOF文件,还会追加到这个缓存中。


具体的逻辑图如下:

触发方式

可以修改 redis.conf


# 表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准
auto-aof-rewrite-percentage 100
# 限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb

显式触发

bgrewriteaof

持久化混合

RDB 和 AOF 各有优缺点,Redis 4.0 版本之后开始支持 RDB + AOF 混合的模式。

如果在混合模式下,AOF rewrite时就直接把 RDB的内容写到 AOF 的开头。

如果要开启 混合模式 修改 redis.conf


aof-use-rdb-preamble yes


相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
650 0
|
5月前
|
存储 SQL 分布式计算
MaxCompute 聚簇优化推荐原理
基于历史查询智能推荐Clustered表,显著降低计算成本,提升数仓性能。
364 4
MaxCompute 聚簇优化推荐原理
|
5月前
|
存储 缓存 监控
Redis分区的核心原理与应用实践
Redis分区通过将数据分散存储于多个节点,提升系统处理高并发与大规模数据的能力。本文详解分区原理、策略及应用实践,涵盖哈希、范围、一致性哈希等分片方式,分析其适用场景与性能优势,并探讨电商秒杀、物联网等典型用例,为构建高性能、可扩展的Redis集群提供参考。
308 0
|
7月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
9月前
|
Cloud Native 大数据 Java
大数据新视界--大数据大厂之大数据时代的璀璨导航星:Eureka 原理与实践深度探秘
本文深入剖析 Eureka 在大数据时代分布式系统中的关键作用。涵盖其原理,包括服务注册、续约、发现及自我保护机制;详述搭建步骤、两面性;展示在大数据等多领域的应用场景、实战案例及代码演示。Eureka 如璀璨导航星,为分布式系统高效协作指引方向。
|
12月前
|
机器学习/深度学习 数据采集 分布式计算
大数据分析中的机器学习基础:从原理到实践
大数据分析中的机器学习基础:从原理到实践
618 3
|
12月前
|
运维 NoSQL 算法
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
本文深入探讨了基于Redis实现分布式锁时遇到的细节问题及解决方案。首先,针对锁续期问题,提出了通过独立服务、获取锁进程自己续期和异步线程三种方式,并详细介绍了如何利用Lua脚本和守护线程实现自动续期。接着,解决了锁阻塞问题,引入了带超时时间的`tryLock`机制,确保在高并发场景下不会无限等待锁。最后,作为知识扩展,讲解了RedLock算法原理及其在实际业务中的局限性。文章强调,在并发量不高的场景中手写分布式锁可行,但推荐使用更成熟的Redisson框架来实现分布式锁,以保证系统的稳定性和可靠性。
809 0
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
|
NoSQL Redis
03- Redis的数据持久化策略有哪些 ?
Redis的数据持久化包括两种策略:RDB(全量快照)和AOF(增量日志)。RDB在指定时间间隔将内存数据集保存到磁盘,而AOF记录所有写操作形成日志。从Redis 4.0开始,支持RDB和AOF的混合持久化,通过设置`aof-use-rdb-preamble yes`。
190 1
|
11月前
|
NoSQL Redis
Redis的数据持久化策略有哪些 ?
Redis 提供了两种方式,实现数据的持久化到硬盘。 1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作 RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
266 5