Redis提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。

1. RDB持久化:

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件。RDB文件是一个经过压缩的二进制文件,可以通过保存某个时间点的数据集来实现数据的备份和恢复。RDB持久化的优点是性能较高,可以最大化Redis的性能,因为Redis在持久化时唯一要做的是启动一个新的进程,并将数据保存到磁盘上,由于Redis处理数据是在内存中,所以直接写入到磁盘上速度很快。缺点是可能会丢失最后一次快照以后更改的数据,因为RDB是间隔一段时间进行持久化,如果持久化之后Redis发生故障,则会丢失最后一次持久化后的数据。

2. AOF持久化:

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,只许追加文件,不许改写文件。Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF相对可靠,AOF文件内容是字符串,非常容易阅读和解析。优点是可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。缺点是AOF文件比RDB文件大,且恢复速度慢。

需要注意的是,如果同时开启了RDB和AOF,当Redis重启时,会优先载入AOF文件进行数据恢复,因为通常情况下AOF数据完整性要比RDB高。在数据恢复时,Redis会先载入AOF文件恢复原始的数据,然后在用RDB的数据进行补充,这样重启后的数据会和最后一次的持久化数据相同。同时,Redis支持同时开启AOF和RDB,但是AOF和RDB互相有优先级,通过配置可以指定。如果AOF存在,那么就优先加载AOF,否则加载RDB。

在Redis中可以通过配置文件(通常是redis.conf)来设置RDB和AOF持久化的相关参数。以下是关于RDB和AOF持久化的一些常见配置选项:

RDB持久化配置:

  1. save:设置触发RDB持久化的条件,格式为save <seconds> <changes>,表示在指定的秒数内,如果有指定数量的键发生改变,则触发RDB持久化。例如:

    save 900 1      # 900秒内至少有1个key被改变则做一次快照
    save 300 10 # 300秒内至少有10个key被改变则做一次快照
    save 60 10000 # 60秒内至少有10000个key被改变则做一次快照
  2. stop-writes-on-bgsave-error:默认为yes,当后台保存进程(bgsave)出错时,主进程是否停止写入。

  3. rdbcompression:默认为yes,对于RDB持久化是否使用LZF压缩字符串对象。

  4. rdbchecksum:默认为yes,在存储和加载RDB文件时是否进行校验。

  5. dbfilename:RDB持久化文件的名称,默认为dump.rdb

  6. dir:RDB文件和AOF文件的存储目录,默认为Redis的启动目录。

AOF持久化配置:

  1. appendonly:默认为no,是否开启AOF持久化。设置为yes以启用AOF。

  2. appendfilename:AOF文件的名称,默认为appendonly.aof

  3. appendfsync:控制AOF文件同步到磁盘的策略。可选值有always(每个写命令都立即同步)、everysec(每秒同步一次)、no(由操作系统决定何时同步)。默认是everysec

    conf复制代码
    
    appendfsync everysec  # 推荐使用,兼顾性能和数据安全性
  4. no-appendfsync-on-rewrite:在AOF重写期间是否禁用fsync。默认为no,表示重写期间仍然进行同步操作。如果设置为yes,则在AOF重写期间不进行同步,这可能会增加数据丢失的风险,但可以提高性能。

  5. auto-aof-rewrite-percentage:触发AOF重写的增长百分比阈值。当AOF文件的大小比上一次AOF重写后的大小大指定的百分比时,触发AOF重写。默认值为100,表示AOF文件大小增长到上次重写后大小的两倍时触发重写。

  6. auto-aof-rewrite-min-size:AOF重写的最小文件大小。只有当AOF文件的大小大于此值时,才会触发AOF重写。默认值为64MB。

  7. aof-load-truncated:当AOF文件出现截断错误时,是否允许Redis加载AOF文件。默认为yes

  8. aof-use-rdb-preamble:默认为yes,表示在AOF文件的开头是否使用RDB格式来存储数据,以加快数据加载的速度。

确保在修改配置文件后重启Redis服务,以使更改生效。请注意,错误的配置可能会导致数据丢失或Redis服务不稳定,因此在修改配置之前,请务必备份原始配置文件,并仔细测试任何更改。

Redis持久化之RDB(Redis DataBase) 和 AOF(Append Only File)的更多相关文章

  1. Redis持久化存储——>RDB & AOF

    Redis中两种持久化存储机制RDB和AOF redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB ...

  2. Redis持久化操作RDB和AOF 对比于HDFS的SecondaryNode

    写在前面的话 最近学习比较多流行的大数据框架和完成两个大数据项目后,又突然学起了Redis.之所以之前的框架不学习记录呢,是因为之前的学习都是为了完成参加服创比赛的项目所以时间较紧,现在基本架构和编码 ...

  3. Redis 持久化之RDB和AOF

    Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...

  4. redis持久化,rdb,aof

    RDB(Redis DataBase) AOF(Append Only File) 周阳语录:能撑过面试经理头一分钟最重要.头一分钟,决定人家还是否想跟你继续聊下去. RDB RDB就是在指定的时间内 ...

  5. 【Redis】Redis 持久化之 RDB 与 AOF 详解

    一.Redis 持久化 我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会一位宕机而丢失.Redis 为我们提供了两种持久化方案, ...

  6. Redis持久化方式RDB和AOF

    Redis 持久化 RDB(快照) 优点 rdb是可进行压缩的二进制文件,表示Redis在某一个时间点的数据快照.非常使用与备份,灾难恢复等场景.比如使用定时任务执行bgsave并备份rdb到serv ...

  7. Redis持久化(RDB和AOF)

    什么是Redis持久化 什么是Redis持久化,就是将内存数据保存到硬盘. Redis 持久化存储 (AOF 与 RDB 两种模式) RDB持久化 RDB 是以二进制文件,是在某个时间 点将数据写入一 ...

  8. 详解Redis持久化(RDB和AOF)

    详解Redis持久化(RDB和AOF) 什么是Redis持久化? Redis读写速度快.性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失.所以我们希望Red ...

  9. redis持久化(RDB、AOF、混合持久化)

    redis持久化(RDB.AOF.混合持久化) 1. RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis ...

  10. Redis 持久化之RDB和AOP

    Redis 持久化之RDB和AOP Redis 有两种持久化方案,RDB (Redis DataBase)和 AOP (Append Only File).如果你先快速了解和使用RDB和AOP,可以直 ...

随机推荐

  1. C/C++ 反汇编:分析类的实现原理

    反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...

  2. 常见的WCF面试问题

    WCF和ASMX WebService的区别是什么? 最基本的区别在于,ASMX或者ASP.NET WebService是用来通过基于HTTP的SOAP来实现通讯.但WCF可以使用任意协议(HTTP, ...

  3. yapi的安装

    1.官方网站:https://hellosean1025.github.io 2.看官方的文档,部署方法: 3. 根据文档 安装环境先: 4. 开始安装yapi 5. 可见需要启动一下 6.重启一下 ...

  4. 【.net core学习一】.net 5.0 webapi部署

    服务器:windows server 2012 x64 1.安装IIS: 2.下载并安装 dotnet-hosting-5.0.13-win.exe 下载地址: https://dotnet.micr ...

  5. 了解一下基本的tcp代理配置

    我们首先用一个简单例子了解一下基本的tcp代理配置 worker_processes 1; #nginx worker 数量 error_log logs/error.log; #指定错误日志文件路径 ...

  6. React axios 使用 http-proxy-middleware 解决跨域问题小记

    壹 ❀ 引 在上篇bug分析的记录文中,提到axios可做到取消接口请求,所以想写一篇关于axios.CancelToken使用以及原理分析的文章(主要是自己好奇到底如何做到的取消).在准备工作阶段, ...

  7. 【Unity3D】相机跟随

    1 前言 ​ 相机跟随是相机指始终跟随特定游戏对象,有以下 2 种跟随效果: 位置跟随:相机指向目标游戏对象的向量始终不变 位置和姿态跟随:相机在目标游戏对象的坐标系下的坐标和朝向始终不变 ​ 实现相 ...

  8. The Network Adapter could not establish the connection errorCode 17002, state 08006

    问题说明 今天在centos7虚拟机中运行java程序,程序启动需要连接主机的oracle,报错: The Network Adapter could not establish the connec ...

  9. Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误

    按照之前我写的文章教程,可以很简单的编译出静态库(仅供学习交流) 编译 windows 上的 qt 静态库 编译出静态库后,替换旧版本的库,见我另一篇文章教程 VS2019 配置 QT 库 之所以没有 ...

  10. C++ 线程的学习---线程死锁

      因为是学习篇,写下是为了个人的学习与理解.故参考其他文章为多. 为什么会有死锁?           想象一下这样的情况,thread A 在run的时候需要等待thread B的结果,也就是th ...