Java高性能开发实战(1)——Redis 7 持久化机制

Java高性能开发实战(1)——Redis 7 持久化机制
Redis版本:7.0.15

1.概述

Redis是一个基于内存的数据库,这意味着其主要数据存储和操作均在内存中进行。这种设计使得Redis能够提供极快的读写速度(通常达到微秒级别),适用于高性能场景,如缓存
  • 然而,由于内存的易失性(断电后数据会丢失),Redis提供了持久化机制:将内存中的数据保存到磁盘中,确保数据在Redis服务重启或崩溃后能够恢复。通过持久化,可以避免数据丢失,提高数据的可靠性
  • Redis提供两种持久化方式
    • RDB(Redis Database):生成数据集的快照实现持久化
    • AOF(Append Only File):记录所有写操作命令,以追加方式写入文件

2.RDB

RDB指的是Redis的一种持久化机制,其核心是生成Redis数据在某个时间点的快照

2.1 快照原理

由于Redis是单线程应用程序,在线上环境时,不仅要处理来自客户端的请求,还要执行内存快照操作(进行文件IO)。单线程同时处理客户端请求和文件IO时会严重降低服务器性能,甚至阻塞客户端请求。因此,Redis使用 fork写实拷贝(Copy On Write) 机制来实现快照持久化

在这里插入图片描述
fork

        Redis在进行RDB持久化时会调用fork函数来创建一个子进程负责完成,父进程则继续处理客户端请求。子进程在创建之初和父进程共享同一数据段

        Linux操作系统的内存空间被分为很多种片段,每个片段又被分为很多个页面,每个页面4KB

在这里插入图片描述
写实拷贝

        当父进程对数据段中的某一数据页面进行修改操作时,Linux操作系统会将该数据页面复制一份分离出来,然后对该页面进行修改,最后父进程指向指向修改后的页面。随着被修改的页面越来越多,内存空间不断膨胀,最多达到原来的两倍

在这里插入图片描述


        从子进程被创建出来的那一刻起,直至拷贝结束,子进程始终指向原始的数据段且所有原数据段不会被修改。所以,在整个拷贝过程中 RDB快照 = 子进程看到的所有数据页面的瞬间状态集合

        拷贝完成后,子进程会被销毁,同时没有指针指向的数据页面也会被销毁

在这里插入图片描述

2.2 触发机制

Redis RDB的触发机制分为自动触发和手动触发两种方式

  • 自动触发
  • 手动触发
    • save命令:同步阻塞式触发,执行期间Redis服务器不处理任何请求,直到RDB文件创建完成(不推荐)
    • bgsave命令:异步非阻塞式触发,Redis会fork一个子进程执行持久化操作,主进程继续处理请求

正常关闭Redis

# 默认执行save(阻塞式)>shutdown# 或>shutdown save # 触发流程:1. 停止接受新连接 2. 执行save(不是bgsave)3. 保存完成后退出 

在redis.conf中通过save指令配置阈值。当在指定时间内发生足够数量的键修改时自动触发bgsave

在这里插入图片描述

2.3 文件处理

        RDB文件保存在dir配置指定的目录下(默认/var/lib/redis),文件名通过dbfilename配置指定(默认dump.sql)

在这里插入图片描述


        在RDB备份过程中,fork出的子进程会将内存数据写入临时文件,临时文件默认命名规则为temp-< pid >.rdb,其中< pid >是子进程的进程ID。当子进程完成RDB文件写入后,Redis会用原子性的rename操作将临时文件重命名为正式RDB文件并删除原文件

在这里插入图片描述

2.4 优缺点

优点

  • 恢复速度快:RDB是数据的二进制快照,恢复时直接加载到内存
  • 备份时对服务影响小:使用bgsave命令时,Redis通过fork子进程在后台保存数据,主进程可以继续处理客户端请求,几乎无阻塞
  • 存储高效:RDB 文件使用二进制格式并支持LZF压缩

缺点

  • 非实时一致性:RDB保存的是某个瞬间的快照,如果保存过程中有大量写入,快照可能不反映完全一致的业务状态
  • 可能丢失更多数据:如果Redis意外宕机,从上一次RDB保存到宕机之间的所有数据修改都会丢失

3.AOF

AOF持久化通过将Redis服务器接收到的每个写命令追加到文件末尾来实现

在这里插入图片描述
# 开启AOF appendonly yes

3.1 工作流程

在这里插入图片描述
  • 命令追加:当Redis执行写命令时,该命令会以Redis协议格式追加到内存中的AOF缓冲区(aof_buf)。缓冲区会根据配置策略决定何时将内容同步到磁盘
    • always:每次写命令后同步,数据安全性最高但性能影响较大
    • everysec:每秒同步一次,平衡性能与安全性(默认配置)
    • no:由操作系统决定同步时机,性能最好但可能丢失较多数据

文件写入与同步:AOF缓冲区内容会被写入到AOF文件,具体同步到磁盘的时机由appendfsync参数控制:

在这里插入图片描述

3.2 重写机制

作用:解决AOF文件不断增长导致的存储空间占用和恢复效率问题。通过重写,可以生成一个更紧凑的AOF文件,仅包含重建当前数据集所需的最小命令集合(例如,对同一个键多次修改会记录多条命令,而重写机制会合并这些操作,仅保留最终状态的命令)

        父进程通过fork创建一个子进程来完成AOF文件的重写,确保主进程继续处理客户端请求。子进程会读取当前数据库的快照数据,并将其转换为一系列Redis命令写入新的临时AOF文件

在这里插入图片描述


        在重写过程中,主进程会将新接收到的写命令同时写入现有的AOF 缓冲区aof_buf(保证原有 AOF 文件正常更新)和AOF重写缓冲区aof_rewrite_buf(保证新命令不会丢失)

        当子进程完成重写后,会通知主进程。主进程会将 AOF 重写缓冲区中的命令追加到新生成的临时 AOF 文件中,最后原子性地替换旧文件

        在Redis7.0.15版本,AOF文件保存在dir + appenddirname配置指定的目录下(默认/var/lib/redis/appendonlydir)。文件前缀名通过appendfilename配置指定(默认appendonly)

在这里插入图片描述
  • appendonly.aof.1.base.rdb:作为Redis AOF(Append-Only File)持久化机制的基准文件,存储某一时刻数据库的完整快照。格式为RDB,体积较小且加载速度快,用于重建数据的基础状态
  • appendonly.aof.1.incr.aofappendonly.aof.2.incr.aof:记录基准文件生成后的增量写操作命令,以文本形式追加存储。多个增量文件按操作顺序编号(如.1.incr.aof.2.incr.aof),Redis 重启时会按顺序重放这些命令以恢复最新数据
  • appendonly.aof.manifest:描述AOF文件的组成和顺序的清单文件

4.混合持久化

        Redis 混合持久化结合了 RDB(快照)和 AOF(日志)两种持久化方式的优势,在保证数据安全性的同时兼顾性能

# 开启混合持久化 aof-use-rdb-preamble yes
  • 基础RDB文件优先加载:appendonly.aof.1.base.rdb作为全量快照数据文件,会优先被加载。该文件包含某一时间点的完整数据快照,恢复时作为基准数据集
  • 增量AOF文件后续应用:appendonly.aof.1.incr.aof作为增量操作日志,在基础RDB加载完成后被重放。该文件记录自 RDB 快照生成后的所有写操作,用于恢复最新数据状态

Read more

RMBG-2.0多任务协同方案:接入Stable Diffusion工作流,生成→抠图→合成一体化

RMBG-2.0多任务协同方案:接入Stable Diffusion工作流,生成→抠图→合成一体化 1. 为什么抠图成了AI图像工作流的“卡点”? 你有没有遇到过这样的场景:用Stable Diffusion生成了一张绝美的角色立绘,但背景太杂乱,想换到电商详情页却卡在了抠图环节?手动PS耗时半小时,AI在线工具又担心图片上传泄露隐私,还动不动就崩掉——毛发边缘糊成一片,玻璃杯透明感全无,甚至把飘动的发丝直接切掉。 这不是个别现象。大量设计师、内容创作者、电商运营者反馈:生成容易,落地难;模型很炫,流程断在抠图这一步。 而RMBG-2.0(BiRefNet)的出现,正在悄悄改变这个局面。它不是又一个“差不多能用”的抠图工具,而是首个真正意义上能无缝嵌入本地AI图像工作流的高精度、低延迟、零隐私风险抠图引擎。它不只解决“能不能抠”,更解决“抠完怎么用”——直接对接SD WebUI、ComfyUI、乃至自定义Python脚本,让“生成→

By Ne0inhk

手把手教你部署Z-Image-Turbo,5分钟搞定AI绘画环境

手把手教你部署Z-Image-Turbo,5分钟搞定AI绘画环境 你是否还在为部署文生图模型时漫长的权重下载、复杂的依赖配置而头疼?现在,这一切都可以结束了。本文将带你5分钟内完成Z-Image-Turbo的完整部署,无需等待下载、不用手动安装依赖,真正实现“开箱即用”的AI绘画体验。 我们将使用预置了完整32.88GB模型权重的专用镜像,一键启动即可生成1024×1024高清图像,仅需9步推理,速度快到惊人。无论你是AI绘画新手,还是想快速测试效果的技术人员,这篇文章都能让你立刻上手。 准备好了吗?让我们开始吧。 1. 镜像简介:为什么选择Z-Image-Turbo? 1.1 模型核心优势 Z-Image-Turbo 是阿里达摩院基于 DiT(Diffusion Transformer)架构推出的高效文生图模型,专为高速高质量生成设计。相比传统扩散模型动辄20~50步的推理过程,它仅需9步即可输出细节丰富的图像,在RTX 4090D等高显存机型上几乎秒级出图。 更关键的是,本次使用的镜像已预置全部32.88GB模型权重文件,直接缓存在系统盘中,避免了动辄数小时的下载等

By Ne0inhk

Qwen2.5-7B智能写作:营销文案自动生成实战

Qwen2.5-7B智能写作:营销文案自动生成实战 1. 引言:大模型驱动内容创作新范式 1.1 营销文案生成的行业痛点 在数字营销时代,高质量、高频率的内容输出已成为品牌竞争的核心。然而,传统文案创作面临三大挑战: * 人力成本高:专业文案撰写耗时耗力,难以满足多平台、多语种的内容需求 * 风格一致性差:不同作者或团队产出的内容调性不统一,影响品牌形象 * 响应速度慢:面对热点事件或市场变化,人工创作难以实现分钟级响应 尽管已有多种AI写作工具,但在长文本逻辑连贯性、结构化输出控制、多语言适配能力等方面仍存在明显短板。 1.2 Qwen2.5-7B的技术突破与应用价值 Qwen2.5 是最新的 Qwen 大型语言模型系列。对于 Qwen2.5,我们发布了从 0.5 到 720 亿参数的多个基础语言模型和指令调优语言模型。Qwen2.5 在 Qwen2

By Ne0inhk

Stable Diffusion 2深度模型终极实战:零基础也能玩转AI立体画生成

Stable Diffusion 2深度模型终极实战:零基础也能玩转AI立体画生成 【免费下载链接】stable-diffusion-2-depth 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/stable-diffusion-2-depth 还在为平面图片缺乏层次感而烦恼吗?Stable Diffusion 2深度模型为你打开立体视觉新世界!这款革命性的AI工具能够将普通图像瞬间升级为具有深度感的立体作品。无论你是设计师、摄影师还是AI爱好者,都能轻松上手,创作出令人惊叹的立体效果。 什么是深度模型?它能为你做什么? 想象一下,给你的照片加上"立体眼镜",让画面瞬间活起来!Stable Diffusion 2深度模型正是这样的神奇工具。它通过智能分析图像深度信息,结合文本描述,让平面图片拥有真实的立体层次。 深度模型的三大核心优势: * 🎯 一键增强:上传图片,输入描述,立即获得立体效果 * 🎨 风格保持:在添加深度的同时,完美保留原图风格 * ⚡ 操作简单:无需复杂参数调整,新手也能快速上手 快速

By Ne0inhk