百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis持久化最全详解(图文全面总结)

mhr18 2024-10-23 11:34 28 浏览 0 评论

Redis是非常重要的分布式缓存,在大型架构里都是广泛使用到,今天重点详解Redis的持久化机制@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Redis持久化

Redis持久化是指将Redis数据库中的数据保存到磁盘上,以确保数据在Redis服务器重启或发生故障时的持久性。

默认情况下,Redis是一个基于内存的数据库,数据存储在内存中,这意味着在Redis服务器关闭或重启时,内存中的数据会丢失。

为了解决这个问题,Redis提供了持久化机制,它将数据以某种格式保存到磁盘上,从而保证数据的持久性。

Redis持久化机制

Redis提供了两种主要的持久化机制,分别是:RDB持久化和RDB持久化。

1.RDB持久化

RDB持久化是将Redis数据库在内存中的数据,以二进制格式保存到硬盘上的文件中。

如下图所示:

下面是Redis RDB持久化的主要步骤:

  1. Fork子进程:Redis使用fork系统调用创建一个子进程,子进程将负责执行实际的RDB持久化操作,而父进程则继续处理客户端请求。
  2. 快照生成:子进程会将当前数据库的状态快照写入一个临时文件中。快照包含了当前数据库中所有键值对的数据,以及一些额外的元数据信息。
  3. 原子性替换:当子进程完成快照的生成后,它会使用原子操作替换掉之前的RDB文件,确保在替换过程中不会发生数据损坏或数据丢失。
  4. 完成持久化:子进程完成RDB文件的替换后,将关闭临时文件,并通知父进程持久化操作已经完成。

Redis RDB持久化优点

Redis RDB机制只需要一个文件dump.rdb即可对Redis的内存数据进行持久化存储,并且具有容灾性好的特点,因为该文件可以保存到安全的磁盘上。

Redis RDB持久化缺点

相对于AOF机制而言,RDB机制的数据安全性可能会稍差一些。

因为RDB机制是间隔一定时间进行一次持久化,如果在两次持久化之间Redis发生故障,可能会导致数据的丢失。

因此,RDB机制更适合对数据安全性要求不高的场景。

2.AOF持久化

AOF持久化是将Redis的写操作以追加的方式记录到一个文件(AOF文件)中,每当发生写操作时,Redis会将相应的命令追加到AOF文件的末尾。

如下图所示:

下面是Redis AOF持久化的主要步骤:

  1. 写入命令追加:每当Redis接收到一个写命令(如SET、DEL、INCR等),它会将相应的命令以追加的方式写入AOF文件的末尾。
  2. 文件同步:根据配置的策略,Redis会定期或根据写操作数量来触发AOF文件的同步操作。同步操作将AOF文件中的缓冲数据刷新到磁盘上的AOF文件,确保数据持久化。
  3. AOF重写(可选):当AOF文件变得过大时,可以执行AOF重写操作来压缩和优化AOF文件的大小。AOF重写会生成一个新的AOF文件,其中包含了从数据库快照开始到当前时间的写命令。通过AOF重写可以减小AOF文件的体积,提高加载速度。
  4. 重启时还原:当Redis重启时,会通过加载AOF文件中的命令来还原数据库的状态。Redis将逐个执行AOF文件中的命令,恢复数据库的数据。

Redis AOF持久化优点:

  1. 数据安全性:AOF持久化记录了每个写操作的命令,因此在发生故障或重启时,可以通过重新执行AOF文件中的命令来还原数据库的状态。
  2. 灵活性:AOF持久化记录了每个写操作的命令,而不仅仅是数据的快照,这使得在数据恢复时更加灵活,可以更细粒度地控制恢复的过程。
  3. 增量持久化:AOF持久化是以追加的方式记录写命令,因此对性能的影响相对较小。

Redis AOF持久化缺点:

  1. 文件较大:相对于RDB持久化而言,AOF文件通常会更大,因为AOF文件记录了每个写命令的详细信息。
  2. 恢复时间较长:当AOF文件较大时,在Redis重启后,需要将AOF文件中的命令逐个执行以还原数据库的状态,这会导致恢复的时间相对较长,尤其是在AOF文件很大的情况下。

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

相关推荐

订单超时自动取消业务的 N 种实现方案,从原理到落地全解析

在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...

使用Spring Boot 3开发时,如何选择合适的分布式技术?

作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...

数据库内存爆满怎么办?99%的程序员都踩过这个坑!

你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...

springboot利用Redisson 实现缓存与数据库双写不一致问题

使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...

外贸独立站数据库炸了?对象缓存让你起死回生

上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...

手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁

为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...

如何设计一个支持百万级实时数据推送的WebSocket集群架构?

面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...

Redis数据结构总结——面试最常问到的知识点

Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...

skynet服务的缺陷 lua死循环

服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

mysql mogodb es redis数据库之间的区别

1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...

redis,memcached,nginx网络组件

1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...

SpringBoot+Vue+Redis实现验证码功能

一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...

AWS MemoryDB 可观测最佳实践

AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...

从0构建大型AI推荐系统:实时化引擎从工具到生态的演进

在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...

取消回复欢迎 发表评论: