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. 部署MooseFS分布式文件系统

    MooseFS是一个分布式文件系统,其本身具有高可用性,高拓展性,开放源代码,高容错,等在数据的读写性能方面,通过dd测试,MooseFS也就是写入的速度稍微好于NFS,读上没有差别. MooseFS ...

  2. Docker从认识到实践再到底层原理(四-2)|Docker镜像仓库实战案例

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  3. OLED 驱动模块程序代码

    1.前言 作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数. 本文介绍的是 OLED, 常见代 ...

  4. 20.1 DLL模块的显式加载和符号链接--《Windows核心编程》

    一.显式加载DLL模块使用函数 LoadLibrary/LoadLibraryEx HINSTANCE LoadLibrary(PCTSTR pSzDLLPathName); HINSTANCE Lo ...

  5. C++——数据类型笔记

    在C++编程中,了解各类数据类型也是至关重要的.下面我会总结一下C++中的数据类型,包括基本类型,符合类型和自定义类型.方便自己整理和理解. 1,基本类型 C++中的基本类型是构建其他数据类型的基础, ...

  6. JS leetcode 猜数字 题解分析,我以为题目在第八层我在第一层,其实我在第三层题目在第一层

    壹 ❀ 引 今天来做一道简单到让我一度怀疑题目本意的题目,题目来自leetcode LCP 01. 猜数字,题目描述如下: 小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个,小 ...

  7. NC14522 珂朵莉的数列

    题目链接 题目 题目描述 珂朵莉给了你一个序列,有 \(\frac{n\times(n+1)}2\) 个子区间,求出她们各自的逆序对个数,然后加起来输出 输入描述 第一行一个数 n 表示这个序列 a ...

  8. Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象(即装饰者),动态扩展目标对象的功能,并且不会改变目标对象的结构,提供了一种比继承更灵活的替代方案.需要注意的是,装饰对象要与目标对象实现相同的接口,或 ...

  9. 图文并茂之AES加密

    本文改编自:http://www.sohu.com/a/198681357_505794 假设有一个发送方在向接收方发送消息.如果没有任何加密算法,接收方发送的是一个明文消息:"我是小灰&q ...

  10. java去除字符串空格

    package test; /** * 去除字符串空格 * * @author xusucheng * @create 2018-07-04 **/ public class RemoveWhites ...