Redis持久化:RDB和AOF

RDB(Redis DataBase) 

 

AOF(Append Only File)

 

AOF重写

  • auto-aof-rewrite-min-size:如果 AOF 文件大小小于该值,则不会触发 AOF 重写。默认值为 64 MB;
  • auto-aof-rewrite-percentage:执行 AOF 重写时,当前 AOF 大小(aof_current_size)和上一次重写时 AOF 大小(aof_base_size)的比值。如果当前 AOF 文件大小增加了这个百分比值,将触发 AOF 重写。将此值设置为 0 将禁用自动 AOF 重写。默认值为 100。

AOF 重写(rewrite) 是一个有歧义的名字,该功能是通过读取数据库中的键值对来实现的,程序无须对现有 AOF 文件进行任何读入、分析或者写入操作。 

Redis 的 AOF(Append-Only File)持久化方式通过将写命令追加到文件中来记录数据库状态。随着 Redis 接受更多的写操作,AOF 文件会持续增长。为了防止文件过大以及优化存储效率和恢复速度,Redis 提供了 AOF 重写机制。

AOF 重写过程的原理如下:

  1. 触发重写

    • 可以手动触发通过执行 BGREWRITEAOF 命令。
    • 也可以配置自动触发,当 AOF 文件大小达到一定阈值或增长比例时,Redis 自动发起重写。
  2. 创建子进程

    • Redis 主进程 fork 出一个子进程来执行重写操作,保证主进程不受影响,继续处理客户端请求。
  3. 读取当前数据集

    • 子进程遍历当前数据库中的所有键及其关联的数据结构,并根据这些数据结构生成一系列最小化的、能够重建当前数据库状态的命令。
  4. 写入新文件

    • 子进程将这些最小化命令序列化为字符串形式,并写入到一个新的临时 AOF 文件中。这个新文件仅包含重建当前数据集所需的最少命令集合,消除了不必要的冗余。
  5. 增量写入

    • 在子进程进行重写的同时,主进程依然接收并处理客户端的写命令,这些新的命令会被追加到内存中的 AOF 缓冲区。
    • 当子进程完成重写后,它会将这段时间积累在缓冲区中的增量命令追加到新的 AOF 文件末尾。
  6. 原子切换文件

    • 子进程完成上述步骤后通知父进程,父进程在确认无误的情况下,用新生成的 AOF 文件替换旧的 AOF 文件,通常是一个原子的操作(例如 rename() 系统调用)。
  7. 清理与压缩

    • 替换完成后,旧的 AOF 文件可能被删除,确保空间回收。

通过这种机制,Redis 能够保持数据的一致性和完整性,同时有效地控制 AOF 文件的大小,提高重启时的数据加载速度。

如何选择?

1、RDB + AOF同时开启

2、混合持久化

开启 RDB 持久化:

RDB 是默认启用的,但你可以检查并设置相关参数以满足你的需求,例如更改保存间隔时间、数据库大小阈值等。

# 保存快照的频率,可以是保存 N 秒内有至少 M 个键被改动的情况
save <seconds> <changes>

# 示例:在900秒内至少有一个key发生变化时,生成一次RDB快照
save 900 1

# 设置 RDB 文件的路径
dbfilename dump.rdb

# 设置数据持久化目录
dir /path/to/your/directory

开启 AOF 持久化:

AOF 需要手动开启,并且可以配置同步策略。

# 开启 AOF 功能
appendonly yes

# 设置 AOF 文件名称
appendfilename appendonly.aof

# 设置 AOF 同步策略:
# always - 每次写命令都会同步到磁盘,最安全但性能开销最大
# everysec - 默认配置,每秒同步一次,兼顾性能与安全性
# no - 不主动进行同步,交给操作系统决定何时同步,性能最好但数据安全性最差
appendfsync everysec # 或者 appendfsync always,或 appendfsync no

# 触发 AOF 文件重写的最小文件尺寸(单位可为 MB 或 GB)
auto-aof-rewrite-min-size 64mb # 可以根据实际情况调整

# 当前 AOF 文件相对于上一次重写后的增长百分比
auto-aof-rewrite-percentage 100 # 建议值为100,表示当AOF文件增长超过原大小的一倍时触发重写

 

混合持久化 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/444001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch学习 day09(简单神经网络模型的搭建)

简单神经网络模型的搭建 针对CIFAR 10数据集的神经网络模型结构如下图&#xff1a; 由于上图的结构没有给出具体的padding、stride的值&#xff0c;所以我们需要根据以下公式&#xff0c;手动推算&#xff1a; 注意&#xff1a;当stride太大时&#xff0c;padding也会变得很大…

我的 4096 创作纪念日

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件&#xff1a; {"http_address_edit_value": "http://xxx.com/xxx/…

python统计日志中数据从开始到结束的响应时间的最大值、最小值、平均值、中位数

应用场景&#xff1a;需要根据日志文件&#xff0c;统计出数据从开始下发到收到回复所需的时间&#xff0c;包括最大值、最小值、平均值、中位数。 日志格式如图类似&#xff0c;每一行日志开始部分就是所需要截取的时间&#xff1b;1条日记是以某些关键词作为开始&#xff0c;…

SSD的原理

简介 SSD&#xff08;Solid State Drive&#xff09;是一种使用闪存存储芯片&#xff08;NAND Flash&#xff09;的存储设备。与传统的机械硬盘不同&#xff0c;SSD没有移动部件&#xff0c;因此具有更快的读写速度和更低的能耗。 架构 NAND Flash是一种非易失性存储器&…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统&#xff1a;dos win &#xff0b; r -》 cmd dos命令 切换盘符&#xff1a;直接输入对应盘符目录操作&#x…

6个维度分析实时渲染和Webgl技术异同

在日常交流中&#xff0c;对Webgl技术熟悉的合作伙伴&#xff0c;在初次了解实时渲染技术时&#xff0c;都会问二者之间的异同。目前很多要求B/S架构的项目&#xff0c;很多在用webgl技术路线&#xff0c;而且这个方案在行业里比较普&#xff0c;业主方对这个也比较熟悉&#x…

基于git推送的ES检索pdf内容优化思路与代码实现

写在前面 在之前的内容中我们已经介绍了创建gitbucket的webHook&#xff0c;使得仓库有更新时自动推送到我们定义的接口&#xff1b;然后Java读取仓库的文件转码写入ES库&#xff0c;这些核心流程已经实现。 1. 实现ES检索pdf等文件内容的插件 2. 基于GitBucket的Hook构建ES…

8. 超级终端和 Minicom

超级终端和 Minicom 在对目标板进行查看、操作或目标板和上位机进行文件传输与通信时&#xff0c;需要安装终端软件。通过终端软件来对目标板进行配置&#xff0c;或者执行目标板上的程序与主机进行通信。 下面介绍 3种终端软件&#xff0c;具体开发时&#xff0c;你仅需任意使…

乐优商城(九)数据同步

1. 项目问题分析 现在项目中有三个独立的微服务&#xff1a; 商品微服务&#xff1a;原始数据保存在 MySQL 中&#xff0c;从 MySQL 中增删改查商品数据。搜索微服务&#xff1a;原始数据保存在 ES 的索引库中&#xff0c;从 ES 中查询商品数据。商品详情微服务&#xff1a;做…

2024 年 AI 辅助研发发展与趋势研究

引言 这几年&#xff0c;人工智能&#xff08;AI&#xff09;技术火得不行&#xff0c;它渗透到了我们生活的方方面面。从帮助我们识别图片、理解语音&#xff0c;到推荐我们喜欢的内容&#xff0c;甚至自动驾驶汽车&#xff0c;AI都在大显身手。特别是在研发领域&#xff0c;…

代码随想录训练营第41天 | 动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、LeetCode 416.分割等和子集

动态规划&#xff1a;01背包理论基础 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;_哔哩哔哩_bilibili 动态规划&#xff1a;01背包理论基础&#xff08;滚动数组&#xff09; 文章讲解&#xff1a;代码随想录(…

好好好,这样玩是吧。

python聊天机器人 //1.安装方法 pip install requests //2.实例 import requestsdef chat_bot():url http://api.qingyunke.com/api.phpparams {key: free,appid: 0}print("你好&#xff01;开始对话吧&#xff08;输入exit退出&#xff09;")while True:user_in…

Navicat Premium:掌控数据库的强大工具

在当今数字化的时代&#xff0c;数据管理变得越来越重要。无论您是数据库管理员、开发人员还是普通用户&#xff0c;找到一个高效、易用的数据库管理工具是至关重要的。Navicat Premium for Mac/Win 就是这样一款强大的多协议数据库管理工具&#xff0c;它将为您的数据库管理体…

指纹加密U盘/指纹KEY方案——采用金融级安全芯片 ACH512

方案概述 指纹加密U盘解决方案可实现指纹算法处理、数据安全加密、数据高速存取&#xff08;EMMC/TF卡/NandFlash&#xff09;&#xff0c;可有效保护用户数据安全。 方案特点 • 采用金融级安全芯片 ACH512 • 存储介质&#xff1a;EMMC、TF卡、NandFlash • 支持全系列国密…

docker 使用官方镜像搭建 PHP 环境

一、所需环境&#xff1a; 1、PHP&#xff1a;7.4.33-fpm 的版本 2、Nginx&#xff1a;1.25.1 的版本 3、MySQL&#xff1a; 5.7 的版本 4、Redis&#xff1a;7.0 的版本 1.1、拉取官方的镜像 docker pull php:7.4.33-fpm docker pull nginx:1.25.1 docker pull mysql:5.7 do…

Java编程实战:构建校园二手物品交易系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A~C)

A - Spoiler 竖线里面的不要输出&#xff0c;竖线只有一对&#xff0c;且出现一次。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cou…

Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程

汇创慧玩 写在前面1. 查看系统架构相关指令2. ARM64交叉编译器环境搭建3. Qt编译arm64环境搭建4. 配置 Qt的本地aarch64交叉编译器5. 工程建立及编译验证 写在前面 苦辣酸甜时光八载&#xff0c;春夏秋冬志此一生 Qt简介&#xff1a; Qt&#xff08;官方发音 [kju:t]&#xff…

配置oh-my-posh

在windows上的powershell上配置oh-my-posh&#xff0c;使其更像在linux用oh-my-zsh。 首先打开powershell&#xff0c;输入&#xff1a; winget install JanDeDobbeleer.OhMyPosh -s winget安装on-my-posh.exe和oh-my-posh上最新的主题。 之后重启powershell。 打开配置文件…