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

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持久化策略详解

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

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

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

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

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

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

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

    主要介绍Redis持久化、主从与哨兵架构详解,详细具体,可操作性好!

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

    Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存...

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

    Redis的四种常见使用方式 1. redis单副本 2....Redis 持久化数据 1. RDB数据持久化 2. AOF数据持久化(推荐方案) Redis 主从复制 详解 Redis 哨兵模式Sentinel 详解 Redis 集群配置 详解

    Redis持久化RDB和AOF区别详解

    RDB是Redis内存到硬盘的快照,用于redis持久化,创建RDB二进制文件,将存储在内存中的数据,持久化的放到硬盘中,当我们需要这些数据的时候,启动载入RDB文件,数据将会被存入内存中,其实RDB就是一种快照的方式持久...

    Redis的持久化方案详解

    Redis支持RDB与AOF两种持久化机制,持久化可以避免因进程异常退出或down机导致的数据丢失问题,在下次重启时能利用之前的持久化文件实现数据恢复。 RDB持久化 RDB持久化即通过创建快照(压缩的二进制文件)的方式...

    docker下的 redis 之持久化存储详解

    本章节开始 我们在docker下 进行 spring Boot项目操作redis 准备工作: (1) 创建文件夹:usr/local/work/share (2) 拉取项目,这是一个打包好的jar包 (3) 将拉取的 jar包放到刚刚创建的文件夹下,同时再创建一个名字为 ...

    Redis教程(十):持久化详解

    一、Redis提供了哪些持久化机制:  1). RDB持久化:  该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。   2). AOF持久化:  该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器...

    Linux下redis的持久化、主从同步与哨兵详解

    1.0 redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。 1|1RDB持久化 redis提供...

    Redis两种持久化方案RDB和AOF详解

    本文主要针对Redis 有两种持久化方案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助大家对这个两种方案有更加深入的理解。 Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果...

    Redis安装配置详解.pdf

    Redis是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(string)、哈希(Hash)、列表...

    CentOS系统安装Redis及Redis的PHP扩展详解

    redis是一款很不错的高性能的key-value数据库,它的出现在很大程度上弥补了很多像memcached这类的keyvalue存储的不足,它的特点有:支持持久化、半持久化数据保存、支持主从同步、value值支持多种类型等等。...

    Linux Redis 的安装步骤详解

    Linux Redis 的安装步骤详解 前言: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings... Redis支持数据的持久化,可以

    redis主从复制原理的深入讲解

    Redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点...

Global site tag (gtag.js) - Google Analytics