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. pywin32 实现寻找窗体并模拟按键

    import win32api import win32gui, win32con import win32clipboard import re import time class cWindow: ...

  2. NC19910 [CQOI2007]矩形RECT

    题目链接 题目 题目描述 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上."连通"是指任两个 ...

  3. NC16742 [NOIP2002]字串变换

    题目链接 题目 题目描述 已知有两个字串 A, B及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在A中的子串 A1可以变换为 B1.A2可以变换 ...

  4. SATA学习笔记——Transport Layer 概述

    一.故事前传 在之前的文章中,我们有提到SATA主要包括:应用层(Application Layer), 传输层(Transport Layer),链路层(Link Layer)以及物理层(Physi ...

  5. Ubuntu 22.04 Samba 安装和配置

    安装 安装 sudo apt install samba 检查服务状态 systemctl status smbd --no-pager -l 检查是否启用(开机自启动) systemctl is-e ...

  6. 内核5.4以上, Realtek 8111网卡初始化失败

    在Centos7中, 升级内核到5.4.x或5.11.x时, 都会出现realtek8111网卡无法启动的问题, 在dmesg中能看到这个错误 $ dmesg |grep -i r8169 ... r ...

  7. java: -source 1.5 中不支持 diamond 运算符

    1.问题说明 平常在用idea编译spring boot多模块项目时,老是无端提示: Error:(107, 55) java: -source 1.5 中不支持 diamond 运算符 (请使用 - ...

  8. std::shared_ptr 和 std::vector 的结合使用

    #include <iostream> #include <string> #include <vector> std::shared_ptr<std::ve ...

  9. 理解[].forEach.call()并说明为什么要使用[].forEach.call()

    [].forEach.call(elems, callback) 相当于: Array.prototype.forEach.call(elems, callback) 又相当于: function(e ...

  10. mysql安装及增删改查操作---day35

    # ### mysql ''' 命令可以用tab来补全 d: D:\>cd MySQL5.7 D:\>cd D:\MySQL5.7\mysql-5.7.25-winx64\bin 直接切换 ...