1、为什么要持久化
redis数据是保存在内存中,如果不做持久化。一旦出现redis进程挂掉或者redis所在服务器宕机等异常情况,重启redis后缓存数据为空。大量请求过来,缓存命中率为0(即缓存已雪崩),导致数据访问直接穿透到DB这一层。DB也可能一下子无法承受过多并发的负载,直接挂掉。
简单点说,持久化是为了:数据恢复,灾难恢复。灾难恢复主要考虑到需要将持久化数据文件异地备份或云端备份,考虑到机房发生火灾、地震等不可抗因素。持久化也可以认为是一种伪高可用的表现。
2、持久化的两种机制
RDB(Redis DB):按照一定的规则,周期性的持久化。(默认开启)
AOF(Append Only File):每条写入命令以命令日志的方式追加到文件中。(默认关闭,如果和RDB同时开启,每次启动时优先以AOF文件来构建缓存数据,因为比较数据比较新)
3、RDB
不管是周期性持久化还是调用(save|bgsave|shutdown)等命令触发的持久化,原理都是类似。redis父进程会fork出一个子进程进行数据的持久化,父进程继续处理用户的请求,待子进程处理完后会用临时文件替换RDB文件。
优点:
1、数据紧凑,同样时间段的数据日志文件,RDB要比AOF的小
2、如果数据量大时,RDB的恢复速度比AOF快
缺点:
1、周期性的持久化势必会导致发生故障时,持久化的数据可能不是最新的,存在上次持久化与故障时间之间的缓存数据丢失问题。
2、如果数据量大,fork出的子进程写数据也比较耗时,会占用CPU等系统资源,也可能会是父进程存在短暂的停止响应。如果数据没写完,发生故障,也存在数据丢失。所以,如果在数据一致性要求比较高的场景,rdb不推荐不适合做第一优先的 恢复方案,适合冷备。
默认的触发策略:
save 900 1 (15分钟变更一次)
save 300 10 (5分钟变更10次)
save 60 10000 (1分钟变更1万次)
默认文件配置
dbfilename dump.rdb
持久化文件存储目录(RDB和AOF都适用),默认为根目录
dir ./
4、AOF
通过记录发送到服务器的写操作命令来形成日志文件(读操作不记录),当日志文件大小超过设置的阈值时,根据当前内存数据重新生成(rewrite)新的AOF文件。
开启AOF持久化
appendonly yes(默认no,关闭)
持久化文件名
appendfilename "appendonly.aof"
策略
appendfsync always #每次都同步,保证数据不会丢失,但会慢
appendfsync everysec #每秒同步,系统默认同步策略
appendfsync no #不主动同步,由操作系统决定,快,但数据容易丢失
修复日志文件
redis-check-aof --fix AOF配置文件名称
重写AOF文件
定义:AOF采用文件追加的方式持久化数据,所以文件会越来越大,为了避免这种情况发生,增加了重写机制
当AOF文件的大小超过了配置所设置的阙值时(默认为100%,即一倍大小),Redis就会启动AOF文件压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof手动触发。
原理:当AOF增长过大时,会fork出一条新的进程将文件重写(也是先写临时文件最后rename),遍历新进程的内存数据,每条记录有一条set语句。
重写AOF文件并没有操作旧的AOF文件,而是将整个内存中的数据内容用命令的方式重写了一个新的aof文件(有点类似快照)
触发机制:Redis会记录上次重写时的AOF文件大小,默认配置时当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
auto-aof-rewrite-percentage 100 (一倍)
auto-aof-rewrite-min-size 64mb
同步过程:
1、Redis 执行 fork() ,现在同时拥有父进程和子进程。
2、子进程开始将新 AOF 文件的内容写入到临时文件。
3、对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。
4、当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。
5、搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。
相关推荐
Redis持久化的配置和管理涉及多个方面的知识,包括但不限于配置文件的设置、内存管理、文件系统的性能、以及操作系统的相关策略等。用户应充分了解这些知识点,以确保Redis能够稳定且高效地运行。
### Redis持久化方式详解 Redis 是一款高性能的键值存储系统,因其卓越的读写速度、丰富的数据结构以及灵活的应用场景而备受青睐。为了保证数据的安全性和持久性,Redis 提供了两种主要的持久化机制:RDB 快照...
Redis持久化是指将Redis中的数据保存到磁盘中,以便在Redis服务器重启或崩溃后可以恢复数据。Redis提供了两种持久化方式:RDB快照和AOFAppend-Only File。 RDB快照 RDB快照是Redis默认的持久化方式,它将内存...
Redis 是一款高性能的键值存储系统,广泛应用于缓存和数据持久化。持久化是Redis的一个重要特性,确保即使在服务器崩溃或系统断电后,数据也能得以恢复。本文将深入解析Redis的持久化机制,主要包括RDB快照和AOF日志...
Redis是一款高性能的键值对内存数据库,常用于缓存、消息队列以及数据持久化等场景。本资料包主要探讨Redis的三个核心概念:持久化、主从复制和哨兵架构,这些都是确保Redis高可用性和数据安全的重要机制。 首先,...
Redis持久化是指利用永久性存储介质将Redis内存中的数据保存到磁盘上的过程,以防止数据的意外丢失,确保数据的安全性。其主要目的就是在Redis服务出现意外情况下,能够通过持久化存储的数据进行恢复,保证业务的...
RDB 是 Redis 默认的持久化方式,它会在指定的时间点创建数据集的快照。通过执行 `SAVE` 或者 `BGSAVE` 命令来触发。`BGSAVE` 会在后台异步执行,不会阻塞主进程。 - **优点**: - 数据恢复速度快,重启后可以直接...
Redis 是一个高性能的键值数据库,广泛应用于缓存、数据持久化等场景。在 Windows 上测试 Redis 的持久化功能,主要是确保数据在系统重启或异常情况后能够被正确地保存和恢复。以下将详细介绍如何在 Windows 环境下...
Redis持久化机制包括RDB快照和AOF(Append Only File)两种方式,它们有不同的特点和使用场景,下面将详细分析这两种机制。 首先,RDB是通过创建数据集的快照来进行持久化的,在默认情况下,Redis会在内存中存储...
Redis 持久化是确保数据安全的重要机制,它提供了两种主要的方法:RDB(Redis Database)和 AOF(Append Only File)。RDB 是一种快照式的持久化方式,而 AOF 则记录每次写操作的日志。 RDB 持久化在特定条件下将...
Redis 持久化是 Redis 为了解决内存数据库在服务器宕机或重启时数据丢失问题而提供的功能。本文主要介绍了 Redis 的两种持久化机制:RDB(Redis Database Backup file)和 AOF(Append Only File),重点讲解了 RDB ...
【Redis持久化机制详解】 Redis作为一种高性能的内存数据库,其数据存储在内存中,因此面临一个问题:当系统崩溃或服务器意外关机时,内存中的数据可能会丢失。为了解决这个问题,Redis提供了两种主要的持久化机制...
作为一款内存数据库,Redis可以实现极快的读写速度,但同时也提供了可持久化功能,以确保数据在系统崩溃或重启后不会丢失。 Redis的持久化机制主要有两种方式:RDB(Redis Database Backup)和AOF(Append Only ...
### Redis Windows 测试Redis持久化功能 #### 一、Redis持久化概述 Redis 提供了两种持久化方式:RDB(Redis Database Backup)和AOF(Append Only File)。本篇文章将重点讨论 RDB 方式的持久化配置与测试方法。 ...
Redis持久化是指将数据库中的数据保存到永久存储设备中,以避免数据丢失。Redis提供了两种持久化方式:RDB(快照方式)和AOF(写日志方式)。 RDB(Redis Database)是一种快照方式的持久化机制,它可以在指定的...
* RDB 持久化:将 Redis 的数据快照保存到磁盘上,可以通过 SAVE 或 BGSAVE 命令触发。 * AOF 持久化:将 Redis 的每条命令记录到日志文件中,可以通过 BGREWRITEAOF 命令触发。 Redis 事务 Redis的事务提供了一个...
RDB持久化RDB(Redis DataBase)持久化是一种基于快照的持久化方式。在指定的时间间隔内,如果满足一定条件(如某段时间内发生的写操作次数),Redis会生成一个包含当前内存数据的RDB文件。这个RDB文件可以用于数据...
Redis 是一个高性能的键值对...通过了解和配置这两种持久化方式,可以根据实际需求权衡数据安全性和性能,为Redis提供合适的数据保护机制。同时,了解如何处理RDB和AOF文件的备份与恢复也是运维过程中必不可少的技能。
虽然 Redis 的主要特性在于其高速的内存操作能力,但为了确保数据的安全性及可靠性,Redis 提供了多种数据持久化机制,以应对可能发生的故障或数据丢失风险。本文将深入探讨 Redis 的两种持久化方式——RDB(Redis ...