`
chong_zh
  • 浏览: 72300 次
  • 来自: 杭州
社区版块
存档分类
最新评论

Redis持久化机制详解

 
阅读更多
Redis提供两种持久化机制,供用户灵活的选用、组合使用:
  • 基于快照的持久化机制:rdb
  • 基于日志的持久化机制:aof


1.快照
1.1 基于快照的持久化
基于快照的持久化(rdb):在系统满足用户设置的条件(时间间隔和累计的写操作次数两方面)时,触发系统向磁盘写入快照从而达到数据持久化的目的。系统将向磁盘写入一个.rdb文件作为所有数据的dump。这个.rdb文件也可以作为备份文件。

快照机制的缺陷也是比较明显的:在两次快照之间,可能有显著的数据丢失。

1.2 源码总结
从代码角度分析,rdb机制的代码调用关系可以用下图总结:

不难分析发现:rdbSave()函数是rdb机制的底层核心实现。触发rdb的时机主要有:
  • 客户端发送SAVE/BGSAVE/FLUSHALL/SHUTDOWN命令
  • Sentinel触发
  • 主从复制中,rdb作为从主节点到从节点的数据复制机制


rdbSave()的主要工作流程:


1.3 两个设计要点
  • 当使用background save时,Redis的快照机制充分利用了Linux 的Copy On Wirte机制。向磁盘写快照的工作由新fork出来的子进程完成,不影响主服务进程的运行。基于Copy On Write策略,子进程由于没有进行任何写操作,可以从父进程的内存空间中直接读取数据写入磁盘。
  • 快照是直接从最终数据集中读取数据写入磁盘的,所以,所有事务要不全部执行完成,要不根本不存在在快照中



2. 日志
2.1 基于日志的持久化
基于日志的持久化机制把每一条修改了数据集的命令都通过APPEND的方式写入到日志。一旦出现实例宕机,重启后Replay日志就可以恢复数据。

2.2 源码总结
基本工作流程如下图所示:

  • 每条命令的具体执行都会调用call()函数,如果该命令涉及到写操作,那么会调用progagate()函数来传播写操作到AOF和slaves。
  • 传播到AOF的工作由feedAppendOnlyFile()完成,主要工作是分析翻译命令写入命令缓存aof_buf。详细流程图见下面附图。
  • 在每一条命令执行前检查aof_buf,并根据aofsync配置调用flushAppendOnlyFile()函数写入到磁盘
  • 当AOF文件太大的时候会进行AOF Rewrite,直接从内存数据集中拉取数据,新建最小的日志文件


feedAppendOnlyFile()函数的主要工作流程如下图所示:


分享到:
评论

相关推荐

    Redis 持久化机制及其实现方案详解

    适合人群:具有基础Redis知识的研发人员,尤其是对Redis持久化机制有深入了解需求的后端开发工程师。 使用场景及目标:①掌握Redis持久化机制的实现细节,提升Redis数据管理能力;②根据业务需求选择合适的持久化...

    Redis持久化策略详解

    Redis持久化策略详解

    从源码解读redis持久化

    【Redis持久化机制详解】 Redis作为一种高性能的内存数据库,其数据存储在内存中,因此面临一个问题:当系统崩溃或服务器意外关机时,内存中的数据可能会丢失。为了解决这个问题,Redis提供了两种主要的持久化机制...

    02-Redis持久化、主从与哨兵架构详解-ev.rar

    02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构详解02-Redis持久化、主从与哨兵架构...

    Redis持久化、主从与哨兵架构详解(1)

    Redis持久化、主从与哨兵架构详解 Redis持久化是指将Redis中的数据保存到磁盘中,以便在Redis服务器重启或崩溃后可以恢复数据。Redis提供了两种持久化方式:RDB快照和AOFAppend-Only File。 RDB快照 RDB快照是...

    02-Redis持久化、主从与哨兵架构详解.zip

    本资料包主要探讨Redis的三个核心概念:持久化、主从复制和哨兵架构,这些都是确保Redis高可用性和数据安全的重要机制。 首先,我们来详细了解一下Redis的持久化。Redis提供了两种主要的持久化方式:RDB(Redis ...

    redis持久化方式

    ### Redis持久化方式详解 Redis 是一款高性能的键值存储系统,因其卓越的读写速度、丰富的数据结构以及灵活的应用场景而备受青睐。为了保证数据的安全性和持久性,Redis 提供了两种主要的持久化机制:RDB 快照...

    Redis持久化、主从与哨兵架构详解.pdf

    Redis持久化机制包括RDB快照和AOF(Append Only File)两种方式,它们有不同的特点和使用场景,下面将详细分析这两种机制。 首先,RDB是通过创建数据集的快照来进行持久化的,在默认情况下,Redis会在内存中存储...

    Redis持久化策略与AOF机制详解

    使用场景及目标:理解和掌握Redis的持久化机制,以便在实际生产环境中选择合适的持久化策略,提高数据的安全性和系统的可靠性。 阅读建议:读者应该重点关注RDB和AOF的具体实现原理及其优缺点,结合自己的业务需求...

    REDIS persistence -- Redis中国用户组(CRUG)1

    Redis 持久化机制详解 Redis 是一个高性能的 NoSQL 数据库,为了确保数据的安全性和可靠性,Redis 提供了多种持久化机制,分别是 RDB 持久化方式和 AOF 持久化方式。本文将对 Redis 持久化机制进行详细的介绍和比较...

    redis学习总结.docx

    Redis 持久化机制详解 Redis 持久化是指将 Redis 中的数据保存到硬盘的过程,以便在 Redis 服务器重启或崩溃时可以从硬盘中恢复数据。Redis 提供了两种持久化方式:RDB 持久化和 AOF 持久化。 RDB 持久化 RDB ...

    Redis windows 测试redis持久化功能.docx

    ### Redis Windows 测试Redis持久化功能 #### 一、Redis持久化概述 Redis 提供了两种持久化方式:RDB(Redis Database Backup)和AOF(Append Only File)。本篇文章将重点讨论 RDB 方式的持久化配置与测试方法。 ...

    Redis持久化、主从与哨兵架构详解

    Redis持久化、主从与哨兵架构详解

    Redis持久化、主从与哨兵架构详解开发文档

    Redis 持久化是确保数据在 Redis 服务器重启或发生故障时不会丢失的重要机制。主要包含两种方式:RDB(Redis Database Persistence)快照和 AOF(Append Only File)日志。 RDB 快照是 Redis 默认的持久化方式之一...

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    Redis使用教程,详解

    Redis 的持久化支持多种方式,包括 RDB 和 AOF 两种模式。 总结 Redis 是一个功能强大、性能高效的 NoSQL 键值存储数据库,广泛应用于缓存、任务列表、网站访问统计数据、过期处理、应用排行榜、分布式集群架构中...

    Redis教程-Redis持久化.docx

    ### Redis 持久化详解 #### 一、引言 Redis 作为一款高性能的键值存储系统,广泛应用于各种场景中的数据缓存与管理。虽然 Redis 的主要特性在于其高速的内存操作能力,但为了确保数据的安全性及可靠性,Redis 提供...

    redis持久化

    ### Redis持久化详解 #### 一、Redis持久化机制概览 Redis提供了两种持久化机制:RDB(Redis Database Backup)快照和AOF(Append Only File)。通过这两种方式可以确保Redis实例的数据在重启或故障后能够恢复。...

    Redis 部署安装 常见redis 4中部署详解

    务的多个 Redis 实例,推荐使用 Sentinel 系统来实现高可用性和故障转移。 Sentinel 系统能够自动检测...同时,合理利用 Redis 的持久化机制,确保数据安全,通过客户端工具进行管理和测试,以优化 Redis 的使用效果。

    redis常用配置详解,配置集群详细内容

    - 设置 `appendonly yes` 可以启用 AOF 持久化方式,提高数据安全性。 ```bash appendonly yes ``` #### 二、Redis 集群配置详解 Redis 集群是一种分布式部署方案,支持自动分片和故障转移等功能。下面详细...

Global site tag (gtag.js) - Google Analytics