首页 > 数据库 >【Redis —— 05 RDB & AOF】

【Redis —— 05 RDB & AOF】

时间:2024-06-30 22:56:08浏览次数:3  
标签:AOF 文件 Redis RDB 默认值 重写

Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append-Only File)。这两种方式各有优缺点,可以根据具体需求进行选择和配置。

RDB 持久化

工作原理

RDB 通过创建数据库的快照来保存数据到磁盘中。快照是指在某个时刻将所有数据保存到一个二进制文件中,文件的默认名称是 dump.rdb

配置选项
# save:配置 RDB 持久化的触发条件。可以设置多个条件
save 900 1   # 900秒内至少有1次写操作
save 300 10  # 300秒内至少有10次写操作
save 60 10000 # 60秒内至少有10000次写操作

# stop-writes-on-bgsave-error:在后台保存失败时是否停止写操作。默认值为 yes
stop-writes-on-bgsave-error yes

# rdbcompression:是否压缩 RDB 文件。默认值为 yes
rdbcompression yes

# rdbchecksum:是否在 RDB 文件中进行校验和。默认值为 yes
rdbchecksum yes

# dbfilename:RDB 文件的名称。默认值为 dump.rdb
dbfilename dump.rdb

# dir:RDB 文件的存储路径
dir /var/lib/redis
优点
  1. 性能:RDB 的持久化对 Redis 性能的影响较小,因为 Redis 在创建快照时会 fork 一个子进程,这样主进程可以继续处理客户端请求。
  2. 文件体积小:RDB 文件通常比 AOF 文件小,适合进行备份。
  3. 恢复速度快:RDB 文件是紧凑的二进制文件,可以快速加载到内存中。
缺点
  1. 数据丢失风险:如果 Redis 在快照之间崩溃,所有自上次快照以来的写入操作都会丢失。
  2. 耗费资源:生成快照可能会消耗大量 CPU 和内存资源,特别是数据量大的情况下。

AOF 持久化

工作原理

AOF 通过将每个写操作记录到日志文件中来持久化数据。AOF 文件的默认名称是 appendonly.aof

配置选项
# appendonly:是否开启 AOF 持久化。默认值为 no
appendonly yes

# appendfilename:AOF 文件的名称。默认值为 appendonly.aof
appendfilename "appendonly.aof"

# appendfsync:AOF 文件的同步策略。可选值有:
#      always:每次写操作后立即同步到磁盘,性能最差但最安全。
#      everysec:每秒同步一次,折中方案,默认值。
#      no:不主动同步,由操作系统决定何时写入磁盘,性能最好但最不安全。
appendfsync everysec

# no-appendfsync-on-rewrite:在 AOF 重写期间是否禁止同步。默认值为 no
no-appendfsync-on-rewrite no

# auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size:配置自动重写 AOF 文件的条件。
# 默认情况下,当 AOF 文件的大小比上次重写后的大小大 100% 时,触发自动重写。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

AOF 文件重写的原理

AOF 文件重写并不是简单地压缩现有的 AOF 文件,而是生成一个新的、更加紧凑的 AOF 文件。重写过程中,Redis 会创建一个新的 AOF 文件,只包含当前数据库状态的最少命令集,从而达到优化文件大小的目的。

重写过程
  1. 开始重写:Redis 通过 BGREWRITEAOF 命令触发重写过程。这个过程会在后台进行,不会阻塞主线程。
  2. 创建子进程:Redis 会 fork 一个子进程,用于执行重写操作。子进程会扫描当前的数据库状态,将其转换为一系列最小化的写操作,并写入到一个新的 AOF 文件中。
  3. 处理新命令:在重写过程中,主进程会继续处理新的写命令,并将这些新命令追加到一个内存缓冲区中。这样可以确保新命令不会丢失。
  4. 合并新命令:当子进程完成重写并生成新的 AOF 文件后,主进程会将内存缓冲区中的新命令追加到新的 AOF 文件中。
  5. 替换旧文件:最后,Redis 会将旧的 AOF 文件替换为新的 AOF 文件,并删除旧文件。整个过程对客户端是透明的,不会中断服务。
优点
  1. 数据安全性高:AOF 可以配置成非常安全,通常只会丢失最近一秒钟的数据。
  2. 可读性好:AOF 文件是日志文件,可以通过文本编辑器查看,便于调试。
  3. 重写机制:Redis 可以对 AOF 文件进行后台重写,减少文件大小。
缺点
  1. 文件体积大:AOF 文件通常比 RDB 文件大,因为它记录了每个写操作。
  2. 恢复速度慢:恢复 AOF 文件需要重新执行所有写操作,速度比加载 RDB 文件慢。
  3. 性能影响大:AOF 会对性能有一定影响,特别是设置为 appendfsync always 时。

选择和组合使用

  • 只使用 RDB:适用于对数据丢失不敏感,且需要高性能的场景。
  • 只使用 AOF:适用于对数据安全性要求高的场景,但需要注意性能和文件大小问题。
  • 同时使用 RDB 和 AOF:推荐的配置,既可以利用 RDB 的快速恢复,又能保证 AOF 的数据安全性。Redis 会优先使用 AOF 文件恢复数据,因为 AOF 数据更完整。

标签:AOF,文件,Redis,RDB,默认值,重写
From: https://blog.csdn.net/m0_72328778/article/details/140079568

相关文章

  • 【Redis —— 06 主从复制配置】
    Redis主从复制(replication)允许一个Redis服务器(称为主服务器)将数据复制到一个或多个Redis服务器(称为从服务器)。这种机制可以用于提高数据的可用性和分布式读取能力。以下是配置Redis主从复制的步骤:主服务器配置在主服务器上,通常不需要进行特殊配置,只需确保Redis服......
  • 【Redis二】Redis数据类型
    目录一.Redis数据类型分布二.字符串类型string 1.概述2.操作三.列表list1.概述2.操作四.哈希hash1.概述2.操作五.无序集合set1.概述2.应用范围3.操作六.有序集合zset1.概述2.应用范围3.操作七.通用命令一.Redis数据类型分布通常Redis的数据类型有五大......
  • 关于锁的使用,千万不要踩这个坑!(附带Synchronized详解和ZooKeeper、Redis等分布式锁详解
    1、分布式锁在分布式系统中,我们经常会使用各种锁来保证数据的一致性和并发安全。一些常见的分布式锁实现包括:基于ZooKeeper的分布式锁:使用ZooKeeper节点的特性来实现分布式锁。基于Redis的分布式锁:利用Redis的原子性操作和过期时间特性来实现分布式锁。Redlock算法:由......
  • Redis常见的16个使用场景
    1、缓存String类型例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。2、数据共享分布式String类型,因为Redis是分布式的独立服务,可以在多个应用之间共享例如:分布式Session<dependency><groupId>org.springframework.session</gr......
  • SpringBoot集成redis配置文件不生效踩坑记录
    SpringBoot版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version></parent>导入spring-boot-stater-data-redis依赖<depen......
  • Redis 高性能基本操作
    单元素操作是基础单元素操作,是指每一种集合类型对单个数据实现增删改查例如,Hash类型的HGET、HSET和HDEL,Set类型的SADD、SREM、SRANDMEMBER等这些操作的复杂度由集合采用的数据结构决定,例如,HGET、HSET和HDEL是对哈希表做操作,所以它们的复杂度都是O(1)Set类型用......
  • 最全Redis数据库Linux安装
    概念所有的I/O操作全在内存中进行,速度非纯快,性能非常搞。如果断电或停止服务,数据就会消失,而内存型数据库恰好可以弥补类似于MySQL等关系型数据库在硬盘当中进行I/O操作的速度上的局限。redis是key-values键值对的存储格式,非关系型安装过程安装redis数据库之前确保在Linux......
  • Redis入门
    目录Redis简介Redis下载启动Redis服务客户端连接 Redis数据类型Redis常用命令字符串操作命令SETkeyvalue        设置指定key的值GETkey        获取指定key的值SETEXkeysecondsvalue        设置指定key的值,并将key的过期时间设......
  • Hyperf redis 异步队列使用
    config/autoload/processes.phpuseApp\Book\Process\CreateQrcodeComsumer;return[Mine\Crontab\MineCrontabProcess::class,Hyperf\AsyncQueue\Process\ConsumerProcess::class,CreateQrcodeComsumer::class//增加自定义的异步队列类];由于hyper......
  • 深入理解redis持久化—AOF日志
    redis为什么需要持久化redis是内存数据库,redis所有的数据都保存在内存中如果此时pc关机或重启,那么内存中的用户数据岂不是丢失了?redis这么不安全吗?作为数据库,保证数据的安全,持久是基本需求,redis采用了AOF和RDB两种持久化方式,将用户数据以特殊形式保存在磁盘中,确保重启时......