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

Redis 持久化:从零到掌握

Redis 作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis 提供了多种持久化机制,确保数据能够安全地存储在磁盘中。

本文将详细介绍 Redis 的持久化机制,包括 RDB 和 AOF 两种持久化方式的工作原理、配置方法、优缺点以及实际应用场景。


Redis 持久化的重要性

Redis 默认是将数据存储在内存中,这种特性使得其读写性能非常高。然而,内存中的数据是临时的,一旦服务器重启或发生故障,内存中的数据就会丢失。为了避免数据丢失,Redis 提供了持久化功能,可以将数据保存到磁盘中。

持久化的主要目的是为了:

  1. 数据备份:防止数据丢失,确保数据安全。
  2. 恢复数据:在服务器故障后,可以从磁盘中恢复数据。
  3. 数据迁移:通过持久化文件可以方便地将数据迁移到其他服务器。

Redis 的持久化方式

Redis 提供了两种持久化方式:RDB(快照) 和 AOF(增量文件)。可以单独使用其中一种,也可以两者结合使用。

1. RDB(快照)持久化

工作原理

RDB 持久化是通过生成数据库的快照(Snapshot)来实现的。Redis会定期将内存中的数据写入到磁盘中,生成一个 .rdb 文件。这个文件是一个二进制文件,保存了某一时刻 Redis 数据库的完整状态。

配置 RDB 持久化

主动备份:

  1. save:是由Redis主进程来执行RDB,会阻塞所有命令
  2. bgsave:开启子进程执行RDB,避免主进程受到影响

RDB 持久化的配置可以通过 redis.conf 文件进行设置。以下是一些常用的配置参数:

# 启用 RDB 持久化
save 60 1
# RDB 文件名称
rdbcompression yes
# RDB 文件路径
dbfilename dump.rdb
# 工作目录
dir ./
  • save 60 1:表示每隔 60 秒,如果有至少 1 个键发生了变化,就会触发一次 RDB 持久化。
  • rdbcompression yes:启用 RDB 文件的压缩,减少文件体积。
  • dbfilename dump.rdb:指定 RDB 文件的名称。
  • dir ./:指定 RDB 文件的存储路径。
优点
  • 文件小:RDB 文件是二进制文件,体积较小,适合用于备份和传输。
  • 恢复快:从 RDB 文件恢复数据的速度较快,因为只需要加载一个文件。
  • 适合备份:RDB 文件适合用于定期备份,方便数据恢复。
缺点
  • 丢失数据:RDB 持久化是基于快照的,两次快照之间的数据可能会丢失。
  • 性能影响:生成 RDB 文件时,Redis 需要 fork 子进程,fork 过程会占用内存和 CPU 资源。

2. AOF(增量文件)持久化

工作原理

AOF 持久化是通过记录每一次写操作(如 SETINCR 等)来实现的。每当有写操作发生,Redis 会将操作记录到 appendonly.aof 文件中。这样,即使服务器重启,Redis 也可以通过回放 AOF 文件中的命令来恢复数据。

配置 AOF 持久化

AOF 持久化的配置同样可以通过 redis.conf 文件进行设置。以下是一些常用的配置参数:

# 启用 AOF 持久化
appendonly yes
# AOF 文件名称
appendfilename "appendonly.aof"
# AOF 文件路径
dir ./
# 同步策略
appendfsync everysec
# 文件重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • appendonly yes:启用 AOF 持久化。
  • appendfilename "appendonly.aof":指定 AOF 文件的名称。
  • appendfsync everysec:设置 AOF 文件的同步策略:
    • always:每次写操作都同步到磁盘(安全性高,但性能低)。
    • everysec:每秒同步一次(默认值,平衡了安全性和性能)。(一般都是用这个)
    • no:由操作系统决定何时同步(性能高,但安全性低)。
  • auto-aof-rewrite-percentage 100:当 AOF 文件体积是上一次重写时的 2 倍时,自动触发重写。
  • auto-aof-rewrite-min-size 64mb:AOF 文件达到 64MB 时才允许重写。
优点
  • 数据完整性:AOF 持久化可以记录每一次写操作,数据丢失的可能性非常小。
  • 灵活性:支持三种同步策略,用户可以根据需求选择。
缺点
  • 文件大:AOF 文件的体积通常比 RDB 文件大,因为它记录了每一次写操作。
  • 恢复慢:从 AOF 文件恢复数据需要回放所有命令,恢复速度较慢。
  • 性能开销:频繁的写操作会导致 AOF 文件同步带来一定的性能开销。

RDB 和 AOF 的结合使用

为了发挥两种持久化方式的优势,Redis 支持同时启用 RDB 和 AOF 持久化。这样的配置可以在一定程度上弥补两者的不足:

  1. 高数据完整性:AOF 持久化确保数据的完整性。
  2. 快速恢复:RDB 持久化提供了快速恢复数据的能力。
  3. 定期备份:RDB 文件适合用于定期备份。

总结

Redis 的持久化功能是确保数据安全的重要手段。RDB 和 AOF 是两种不同的持久化方式,各有优缺点。RDB 适合用于定期备份和快速恢复,而 AOF 则适合需要高数据完整性的场景。在实际应用中,可以根据需求选择合适的持久化方式,或者两者结合使用。

通过合理配置和优化,Redis 的持久化功能可以在保证数据安全的同时,尽可能减少对性能的影响。希望这篇文章能帮助你更好地理解和使用 Redis 的持久化功能!

相关文章:

Redis 持久化:从零到掌握

Redis 作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis …...

Mybatis MyBatis框架的缓存 一级缓存

1. 缓存的概念 缓存的概念 在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。 2.Mybatis缓存 mybatis包含了一个非常强大的查询缓存特性&#…...

第1章大型互联网公司的基础架构——1.6 RPC服务

你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务,两者的定位不一样。一般来说,一个业务场景的核心逻辑都是在RPC服务中实现的,强调的是服务于后台系统内部,所谓的“微服务”主要指的就是RPC服务;而HTTP服…...

多个用户如何共用一根网线传输数据

前置知识 一、电信号 网线(如以太网线)中传输的信号主要是 电信号,它携带着数字信息。这些信号用于在计算机和其他网络设备之间传输数据。下面是一些关于网线传输信号的详细信息: 1. 电信号传输 在以太网中,数据是…...

idea-gradle打包运行配置

最近接触了一个项目,使用gradle做为构建工具,这里记录一波,毕竟平时使用的都是maven idea 配置 这里有个坑,Gradle Wrapper,配置的地址gradle下载超时 这个配置修改成阿里的 第一张 第二张 第二张配置的jvm貌似没啥用…...

(新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…...

一键部署开源DeepSeek并集成到钉钉

一键部署开源DeepSeek并集成到钉钉 简介: DeepSeek发布了两款先进AI模型V3和R1,分别适用于对话AI、内容生成及推理任务。由于官方API流量限制,阿里云推出了私有化部署方案,无需编写代码即可完成部署,并通过计算巢AppF…...

【爬虫基础】第一部分 网络通讯 P1/3

前言 1.知识点碎片化:每个网站实现的技术相似但是有区别,要求我们根据不同的网站使用不同的应对手段。主要是常用的一些网站爬取技术。 2.学习难度:入门比web简单,但后期难度要比web难,在于爬虫工程师与网站开发及运维…...

ES10中Object.fromEntries(),trimStart() ,trimend()的使用方法和使用场景例子

ES10(ECMAScript 2019)新特性总结 ES10(ECMAScript 2019)引入了一些新的方法,增强了 JavaScript 的灵活性和易用性。以下是 Object.fromEntries(),trimStart() 和 trimEnd() 的使用方法、使用场景以及例子…...

车载音频配置(二)

目录 OEM 自定义的车载音频上下文 动态音频区配置 向前兼容性 Android 14 车载音频配置 在 Android 14 中,AAOS 引入了 OEM 插件服务,使你可以更主动地管理由车载音频服务监督的音频行为。 随着新的插件服务的引入,车载音频配置文件中添加了以下更改: • OEM 自定义的车…...

级联选择器多选动态加载

一.级联展示 注:因为级联选择器这里是动态加载,因此如果上来选中一级就需要加载出后面三级的全部数据,依然会很卡,因此,和产品协商把一二级多选框去掉了,这样也避免了你选择一级不能实现子级被全部选中的问…...

华为动态路由-OSPF-骨干区

华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议(IGP),用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组(IETF)定义的标准之一,被广…...

网络安全治理模型

0x02 知识点 安全的目标是提供 可用性 Avialability机密性 confidentiality完整性 Integrity真实性 Authenticity不可否认性 Nonrepudiation 安全治理是一个提供监督、问责和合规性的框架 信息安全系统 Information Security Management System ISMS 策略,工作程…...

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...

spring微服务+dubbo框架,某一服务启动时提示多个bean存在

在java的springboot项目中使用DubboService的注解的实现类中,在引用本模块的类时,使用的DubboRefrence注解,在启动项目时报错,提示该类需要以一个bean对象,但是存在了两个,把DubboRefrence的注解改成Autowi…...

跟着 Lua 5.1 官方参考文档学习 Lua (3)

文章目录 2.5 – Expressions2.5.1 – Arithmetic Operators2.5.2 – Relational Operators2.5.3 – Logical Operators2.5.4 – Concatenation2.5.5 – The Length Operator2.5.6 – Precedence2.5.7 – Table Constructors2.5.8 – Function Calls2.5.9 – Function Definiti…...

PyTorch 源码学习:阅读经验 代码结构

分享自己在学习 PyTorch 源码时阅读过的资料。本文重点关注阅读 PyTorch 源码的经验和 PyTorch 的代码结构。因为 PyTorch 不同版本的源码实现有所不同,所以笔者在整理资料时尽可能按版本号升序,版本号见标题前[]。最新版本的源码实现还请查看 PyTorch 仓…...

力扣-二叉树-501 二叉搜索树的众数

思路 二叉搜索树的特性就是中序遍历有序&#xff0c;所以思考时可以先按照有序数组思考 代码 class Solution { public:vector<int> result;TreeNode* pre nullptr;int count 1;int maxCount 0;void travesl(TreeNode* node){if(node nullptr) return;travesl(nod…...

vscode复制到下一行

linux中默认快捷键是ctrl shift alt down/up 但是在vscode中无法使用&#xff0c;应该是被其他的东西绑定了&#xff0c;经测试&#xff0c;可以使用windows下的快捷键shift alt down/up { “key”: “shiftaltdown”, “command”: “editor.action.copyLinesDownAction”…...

vscode将文件中行尾默认CRLF改为LF

安装prettier npm install --save-dev --save-exact prettier执行命令 npx prettier --write --end-of-line lf .即可将项目中的所有文件行尾序列格式改为lf *在你使用git拉取代码的时候&#xff0c;git会自动将代码当中与你当前系统不同的换行方式转化成你当前系统的换行方…...

Windows 环境下配置多个不同版本的 Maven

在实际开发中,不同的项目可能需要使用不同版本的 Maven。例如,老项目可能依赖于 Maven 3.3,而新项目可能需要 Maven 3.8+ 才能正常运行。因此,在 Windows 下配置多个 Maven 版本并能方便地切换是非常必要的 1. 下载并安装多个 Maven 版本 1.1 下载 Maven 访问 Apache Mav…...

网络运维学习笔记 013网工初级(HCIA-Datacom与CCNA-EI)DHCP动态主机配置协议(此处没讲思科)

文章目录 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;网关配置DHCP服务器配置如果没有DHCP服务器&#xff0c;只在网关上做DHCP服务器&#xff1a; DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主…...

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase04 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月17日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-004测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

llama.cpp将sensor格式的大模型转化为gguf格式

前言 ollama本地只能导入gguf格式的大模型文件&#xff0c;将safetensors 文件转化为gguf格式。需要使用 llama.cpp 这个开源工具。以下是使用 llama.cpp 转换 .safetensors 格式模型到 .gguf 格式的详细步骤: 1. 首先克隆并编译 llama.cpp: 克隆项目 git clone https://gi…...

Fastgpt学习(5)- FastGPT 私有化部署问题解决

1.☺ 问题描述&#xff1a; Windows系统&#xff0c;本地私有化部署&#xff0c;postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions "&#xff0c;“ DETAIL: Permissions should be urwx (0700) or urwx,gr…...

【Linux AnolisOS】配置Linux固定ip地址。然后在Windows上连接使用linux中docker容器里的redis和nacos。

1.关于将虚拟机ip地址更改为静态地址 &#xff0c;跟着下面这个视频搞的&#xff0c;不想看文章的可以看视频。 第四章-07-配置Linux固定IP地址哔哩哔哩bilibili 当用的centos9 视频里让我们打开网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 但是我打开时…...

Linux应用之构建命令行解释器(bash进程)

目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候&#xff0c;命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…...

挪车小程序挪车二维码php+uniapp

一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序&#xff0c;采用匿名通话的方式&#xff0c;用户只能在有效期内拨打车主电话&#xff0c;过期失效&#xff0c;从而保护车主和用户隐私。提供微信小程序端和服务端源码&#xff0c;支持私有化部署。 更新日志 V1.0…...

DockerDesktop更改默认的磁盘镜像地存储位置

DockerDesktop更改默认的磁盘镜像地存储位置 文章目录 DockerDesktop更改默认的磁盘镜像地存储位置1. 默认存储位置2. 新建一个目录3. 将磁盘镜像存储位置改为新建的目录下 1. 默认存储位置 2. 新建一个目录 如&#xff1a;D:\DiskImagelocationData 3. 将磁盘镜像存储位置改为…...

[数据结构]顺序表详解

目录 一.线性表 二.顺序表 2.1概念及结构 1. 静态顺序表&#xff1a;使用定长数组存储元素。 2. 动态顺序表&#xff1a;使用动态开辟的数组存储。 2.1按需申请 2.2 接口实现&#xff1a;增删查改 SeqList.h: SeqList.c: test.c 一.线性表 线性表 &#xff08; line…...