当前位置: 首页 > news >正文

Redis如何实现持久化

Redis如何实现持久化


Redis默认将所有数据存储在内存中,虽然读写效率极高,但存在两大风险

  • 数据易失性:进程重启或服务器宕机导致内存数据丢失。
  • 恢复成本高:无法直接通过内存重建大规模数据集。

Redis作为高性能的键值数据库,其核心特性之一是数据持久化——将内存中的数据持久保存到磁盘,防止服务宕机时数据丢失,持久化机制通过在磁盘中保存数据副本,为Redis提供了数据安全保障和灾难恢复能力

目前Reids有两种持久化机制

RDB

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。

快照文件称为RDB文件,默认是保存在当前运行目录

触发方式

  1. 手动触发

    • SAVE:阻塞主进程直至快照完成(生产环境慎用)
    • BGSAVE:fork子进程异步生成快照(主流方式)
  2. 自动触发
    redis.conf中配置规则,例如:

    save 900 1      # 900秒内至少1次修改
    save 300 10     # 300秒内至少10次修改
    save 60 10000   # 60秒内至少10000次修改
    

    RDB的其他配置也可以在redis.conf中配置

    # 是否压缩,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
    rdbcompression yes# RDB文件名称
    dbfilename dump.rdb#文件保存的路径目录
    dir ./
    

异步生成

在 Redis 生成 RDB 文件时是异步的(使用 bgsave 命令)采用了 fork 子进程的方式来进行快照操作。生成 RDB 文件的过程由子进程执行,主进程继续处理客户端请求,所以可以保证 Redis 在生成快照的过程中依然对外提供服务,不会影响正常请求

在这里插入图片描述

并且在生成过程中,主进程会正常处理客户端的请求,如果进行数据的修改,就会使用写时复制的技术:

  • 当主进程执行读操作时,访问共享内存
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作,后续主进程的读操作也会访问拷贝的数据

优缺点

优点

  • 文件紧凑:二进制压缩格式,体积小,适合备份与迁移。
  • 恢复速度快:直接加载快照文件到内存,效率极高。
  • 性能影响小:异步生成快照,对主进程影响有限。

缺点

  • 数据丢失风险:两次快照间的数据可能丢失。
  • 大文件生成耗时:数据集较大时,fork子进程可能导致短暂延迟。

AOF

AOF全称为Append OnlyFile(追加文件),Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。,AOF以日志形式记录所有写操作命令,重启时通过重放命令重建数据,AOF文件更注重数据安全性

比如说当执行写操作的时候:

SET name jack

这条命令会更改redis中的数据,并且在AOF文件中记录操作命令:

$3
SET
$3
name
$3
jack

AOF默认是关闭的,需要在配置文件中打开

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename"appendonly.aof"

文件同步策略:根据策略(appendfsync)将缓冲区内容写入磁盘:

  • always:每次写操作同步(安全,性能最低)
  • everysec:每秒同步(平衡方案,推荐默认)
  • no:由操作系统决定(性能最佳,风险最高)

可以redis.conf中配置:

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到A0F文件,是默认方案
appendfsync everysec#写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

优缺点

优点

  • 数据安全性高:最多丢失1秒数据(everysec配置)。
  • 可读性强:AOF文件为文本格式,便于人工分析。
  • 容错机制:支持崩溃后使用redis-check-aof工具修复。

缺点

  • 文件体积大:即使经过重写,通常仍大于RDB文件。
  • 恢复速度慢:重放所有命令耗时较长。
  • 写入负载高:高频写入场景可能影响性能。

对比

RDBAOF
持久化方式定时对整个内存做快照记录每一次执行的命令
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积小记录命令,文件体积很大
宕机恢复速度很快
数据恢复优先级低,因为数据完整性不如AOF高,因为数据完整性更高
系统资源占用高,大量CPU和内存消耗低,主要是磁盘IO资源
但AOF重写时会占用大量CPU和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全性要求较高常见

如何选择持久化方案

场景推荐方案理由
数据备份与快速恢复RDB文件小,加载速度快
高数据安全性要求AOF(everysec)最多丢失1秒数据
平衡安全与性能RDB + AOF(混合模式)兼顾恢复速度与实时性
容灾恢复RDB定期备份至云存储防止物理损坏

http://www.mrgr.cn/news/94768.html

相关文章:

  • 判断字符串是否为回文(信息学奥赛一本通-1146)
  • 4张图,9个方法,搞定 “信贷风控策略调优”
  • 正则表达式:贪婪匹配与非贪婪匹配
  • 2025.3.17总结
  • 【系统架构设计师】操作系统 - 文件管理 ③ ( 树形目录结构 | 文件属性 | 绝对路径 与 相对路径 )
  • Docker命令解析:加速你的容器化之旅(以Nginx为例)
  • dfs(十三)206. 反转链表
  • VLLM:虚拟大型语言模型(Virtual Large Language Model)
  • Hoppscotch 开源API 开发工具
  • Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】
  • 机器学习——深入浅出理解朴素贝叶斯算法
  • win10 c++ VsCode 配置PCL open3d并显示
  • Couldn‘t install PSEXESVC service: 拒绝访问。
  • Function 原型 原型链 继承的实现
  • Oracle检索数据
  • SpringBoot 启动过程
  • 蓝桥杯每日一题——Acwing 5438. 密接牛追踪2
  • 【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型
  • C++特性——智能指针
  • 【leetcode hot 100 146】LRU缓存