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. 9.0 Python 内置模块应用

    Python 是一种高级.面向对象.通用的编程语言,由Guido van Rossum发明,于1991年首次发布.Python 的设计哲学强调代码的可读性和简洁性,同时也非常适合于大型项目的开发.Py ...

  2. 【C语言深度解剖】复数运算问题--【好题系列】学会这题,结构体没问题

    复数问题 今天博主给大家带来一道博主自己在学校做到的一个题目.这个题目可以很好的加深我们对C语言结构体的理解,在这里分享给大家.学懂这题,我们的C语言结构体,没问题了! 本篇建议收藏后食用!以免退出找 ...

  3. js转化文章发布于几天几小时几分钟前

    alert(dateFormat('2020-07-08 11:32:44')); function dateFormat(d1) { var dateEnd = new Date();//获取当前时 ...

  4. 洛谷P1923 求第K小的数 研讨关于输入输出效率的问题(scanf and cin ,printf and cout)

    最简单的思想就是将这n个数从小到大排序,然后直接输出下标为K的数,不用想肯定会超时,三个测试点过了,另外两个超时. 那么我想的就是,既然全排序会超时,有没有什么方法可以不用全排序也可以拿出第K小的数呢 ...

  5. 24.1 SetUnhandledExceptionFilter未处理异常--《Windows核心编程》

    对于未处理异常,例如异常过滤返回EXCEPTION_CONTINUE_SEARCH,向上搜索,但无法搜索到处理部分,产生未处理异常.Windows提供了 SetUnhandledExceptionFi ...

  6. 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...

  7. 《ASP.NET Core 微服务实战》-- 读书笔记(第8章)

    第 8 章 服务发现 面对大量服务,为了简化配置和管理工作,我们需要了解"服务发现"概念 回顾云原生特性 配置外置 将 URL 和登录凭证移到配置文件和 C# 代码之外,放到环境变 ...

  8. Hadoop-大数据组件版本号查看

    1.操作系统 cat  /etc/redhat-release ; 2.JDK java -version 3.SCALA scala --version 4.MySQL mysql --versio ...

  9. [Java]HashMap与ConcurrentHashMap的一些总结

    HashMap与ConcurrentHashMap的一些总结 HashMap底层数据结构 JDK7:数组+链表 JDK8:数组+链表+红黑树 JDK8中的HashMap什么时候将链表转为红黑树? 当发 ...

  10. NC21125 践踏

    题目链接 题目 题目描述 首先给定一个定值k,支持如下操作(在数轴上) 加入一条线段[l,r] 删除一条已经存在的线段 给定x,问有多少个区间包含x+kt,其中t是一个整数变量,即t ∈ Z 比如说当 ...