Redis系列之持久化机制RDB和AOF

Redis系列之持久化机制RDB和AOF

文章目录

  • 1. 为什么需要持久化?
  • 2. 持久化的方式
  • 3. RDB机制
    • 3.1 RDB机制介绍
    • 3.2 配置RDB
    • 3.3 什么时候触发
    • 3.4 操作实例
    • 3.5 RDB优势和不足
  • 4. AOF机制
    • 4.1 什么是AOF机制?
    • 4.2 同步机制
    • 4.3 重写机制
    • 4.4 AOF的优势和不足
  • 混合模式
  • 参考资料

1. 为什么需要持久化?

Redis的数据是保存在内存中的,如果每次关闭或者机器断电,就会出现数据丢失,所以需要进行持久化保存处理

2. 持久化的方式

Redis进行持久化保存的方式主要有两种:RDB和AOF,在redis官网也有进行介绍: https://redis.io/docs/manual/persistence/

3. RDB机制

3.1 RDB机制介绍

RDB,Redis Database快照,是Redis默认的持久化方案。当满足一定条件的时候,会把当前内存中的数据写到磁盘,生成一个快照文件,默认的文件名为dump.rdb

3.2 配置RDB

可以在redis.conf配置RDB文件的文件名和路径

  # The filename where to dump the DBdbfilename dump.rdb # 文件路径dir ./

3.3 什么时候触发

  • 自动触发

    • 配置触发

      # 在redis.conf配置,配置300s检查一次,至少有1个key被修改就触发
      save 300 10 
      
    • shutdown关闭触发

      在redis执行shutdown正常关闭的时候会去持久化数据到磁盘

    • flushall命令触发

      清空数据操作会触发RDB操作,并且生成一个空的RDB文件,所以,如果没有开启其它持久化方式的时候,使用flushall是很危险的,在生产环境慎用

  • 手动触发

    • save

    • bgsave

      redis-cli使用savebgsave命令

    127.0.0.1:6379> save
    OK
    127.0.0.1:6379> bgsave
    Background saving started
    127.0.0.1:6379>
    

    save和bgsave对比

    命令savebgsave
    IO类型同步异步
    阻塞是(发生在fork)
    复杂度O(n)O(n)
    消耗内存不会消耗额外内存fork消耗内存
    备份主线程去进行备份,备份期间不会去处理其它的指令,其它指令必须等待子线程去进行备份,其它指令正常执行

3.4 操作实例

添加一些数据

127.0.0.1:6379>set k1 1
127.0.0.1:6379>set k2 2
127.0.0.1:6379>set k3 3

查询验证数据是否保存成功

127.0.0.1:6379>keys *

shutdown操作触发RDB进行快照

127.0.0.1:6379>shutdown

在redis目录里对dump.rdb文件进行备份,备份一份新的dump.rdb.backup,然后重新启动redis

然后再来模拟一些删库跑路

127.0.0.1:6379>flushall

然后关闭redis服务端,再启动,发现数据已经丢失,要恢复数据,只能先删了dump.rdb,再将备份的dump.rdb.backup改为dump.rdb,重启redis,发现数据已经恢复

3.5 RDB优势和不足

  • RDB的优点:

    Redis官网总结归纳的redis RDB的优点

    在这里插入图片描述

    • RDB是个紧凑型的文件,适合容灾备份,恢复速度非常快

    • RDB最大限度的提高性能,会fork一个子进程,父进程不会产生磁盘io

    • 可以做到很快的重启

      简而言之,RDB备份与恢复都非常的快

  • RDB的不足:

    在这里插入图片描述

    • 数据安全性不是很高,因为是根据配置的时间来备份,假如每5分钟备份一次,就可能会有5分钟数据的丢失

    • 经常fork子线程,所以会比较耗CPU,对CPU不是很友好

4. AOF机制

由于RDB的数据安全性不是很好,所以redis又提供了另外一种持久化方案,AOF

4.1 什么是AOF机制?

AOF:Append Only File,顾名思义,就是一种追加文件的意思,工作机制比较好理解,redis会将每一个收到的写命令通过write函数追加到文件中,通俗理解就是日志记录

AOF机制默认是关闭的,你可以在配置文件中开启,找到redis.conf

# 默认是关闭的,可以进行开启
appendonly no
# The name of the append only file (default:"appendonly.aof")
appendfilename "appendonly.aof"

4.2 同步机制

在这里插入图片描述

  • appendfsync always:表示每次写入都执行fsync刷新函数,性能会非常慢,但是非常安全
  • appendfsync everysec: 每秒执行一次fsync函数,可能丢失1s的数据
  • appendfsync no:由操作系统保证数据同步到磁盘,速度最快,你的数据只需要交给操作系统就行

4.3 重写机制

由于AOF是追加的形式,所以文件就会越来越大,越大的话,数据加载越慢,所以我们需要对AOF文件进行重写

  • 重写流程:

以redis7之前的版本为例

  1. Redis fork一个子进程,在一个临时文件中写入新的数据
  2. 如果在写入新的文件的过程中,主进程还会有指令进入,那么主进程会在内存缓存区中累计新的指令
  3. 如果子进程重写完成,主进程会收到完成信号,并且将缓存中的指令追加到新的aof文件中
  4. 替换旧的aof文件,并且将新的指令附加到重写好的aof文件中
  • 什么时候重写?

    需要配置文件redis.conf

    # 配置达到百分比大小就触发重写
    auto-aof-rewrite-percentage 100
    # 配置达到文件大小就触发重写,就算达到第一个百分比大小,也必须大于64M才触发重写
    auto-aof-rewrite-min-size 64mb
    

举例,在aof文件达到64mb的时候就重写1次,重写后的aof文件大小假如为50mb,上面第一个配置auto-aof-rewrite-percentage为100,即aof文件到了100mb的时候,进行再次重写

4.4 AOF的优势和不足

  • 优势

    1. 安全性高,就算是使用默认的持久化同步机制,也最多只会导致1s的数据丢失

    2. AOF文件相对安全,AOF文件由于某些原因,比如磁盘满了等导致追加失败,也可以通过redis-check-aof工具来修复

      [root@localhost src]$ ./redis-check-aof --fix append
      
    3. 数据格式都是追加的日志,所以可读性更高

  • 不足

    1. 数据集一般比RDB大
    2. 持久化和加载都比RDB慢
    3. 在redis7.0版本之前,重写的时候,新的指令会缓存到内存区,所以会导致占用大量的内存
    4. 在重写期间,会跟磁盘进行两次IO,一个是写入旧的AOF文件,一个是写入新的AOF文件

混合模式

看了上面的介绍,我们知道RDB和AOF两种方式各有优缺点,RDB会有数据丢失的风险,但是备份和恢复的速度很快,AOF虽然可以保证数据的一致性,但是恢复数据时候会很慢。

所以从Redis4.0之后加了一种混合RDB和AOF的模式,这种模式,前部分是使用RDB格式 作为全量备份,后面部分使用AOF追加的写命令数据作为增量备份

在这里插入图片描述

混合模式开启,在redis.conf里修改配置

aof-use-rdb-preamble yes 

参考资料

  • https://redis.io/docs/management/persistence/
  • Redis进阶 - 持久化:RDB和AOF机制详解
  • Redis两种持久化机制RDB和AOF详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单使用国产数据库—达梦

达梦数据库是一款由中国的达梦软件公司开发的关系数据库管理系统(RDBMS),它在业界以其高性能、可扩展性和安全性而著称。该系统广泛应用于各种应用程序的数据存储和管理,满足用户对于数据处理和管理的多样化需求。 安装好的达梦数…

119.龙芯2k1000-pmon(18)-全自动安装linux系统

经过两天的测试和完善,现在基本已经正常可用了。 (全自动是假,接近全自动吧。) 需要使用配测电脑的网络功能,windows即可,脱离linux虚拟机。(理论上讲u盘也是可以的) 测试平台&…

客户案例|100M 768 维向量数据,Zilliz Cloud 稳定支持 Shulex VOC 业

日前,国际化 VOC SaaS 公司数里行间(Shulex)将上亿数据量的核心业务从开源向量数据库 Milvus 迁移至全托管的向量数据库云服务 Zilliz Cloud。 相比于 Milvus,Zilliz Cloud 实现了 Shulex VOC 评论分析洞察报告生成速度 30% 的提升…

AI 驱动的医疗变革:迈向未来医疗新生态

直面呼啸而来的人工智能,医疗行业将首当其冲,发生翻天覆地的变化。美国心脏病学家兼基因学教授埃里克托普在《未来医疗》中预测,未来人类将拥有“健康小助手”——个人医疗数据和处理能力,还能轻松预防疾病。诸多评论家也持类似观…

南京观海微电子---快速上手DDR读写例程——DDR接口专栏(三)

1. 前言 本文将向大家介绍如何使用DDR IP核的Native接口来对DDR进行读写操作。 2. DDR IP核接口介绍 要想把DDR3 IP核使用起来,必先需要了解下该IP核有哪些接口。DDR3 IP核接口图如下所示。注:图中展示的为DDR IP的Native接口,除了Native接…

javaEE8(数据库编程课后习题1,2)

一&#xff1a; 二&#xff1a; 数据库内信息&#xff1a; 登录&#xff1a; 注册&#xff1a; Register.jsp <% page pageEncoding"UTF-8" import"java.sql.*"%> <!DOCTYPE html> <html lang"en"> <head> <…

未知生,焉知死!小动物S了,如何处理?一个人一生该坚持的几件事——早读(逆天打工人爬取热门微信文章解读)

天地不仁&#xff0c;以万物为刍狗 引言Python 代码第一篇 人民日报 【夜读】一个人一生该坚持的几件事第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 “未知生&#xff0c;焉知死” 曾经视为定数的冰冷生命 在热烈的内心烛照下 应当焕发出滚烫的热情 唯有热爱…

注意力、自注意力和多头注意力的区别

本文作者&#xff1a; slience_me 注意力、自注意力和多头注意力的区别 理解注意力&#xff08;Attention&#xff09;、自注意力&#xff08;Self-Attention&#xff09;和多头注意力&#xff08;Multi-Head Attention&#xff09;之间的区别非常重要&#xff0c;因为它们是自…

[HackMyVm] Quick

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

nginx禁止国外ip访问

1.安装geoip2扩展依赖 yum install libmaxminddb-devel -y 2.下载ngx_http_geoip2_module模块 https://github.com/leev/ngx_http_geoip2_module.git 3.编译安装 ./configure --add-module/datasdb/ngx_http_geoip2_module-3.4 4.下载最新数据库文件 模块安装成功后,还要…

【阿里云系列】-基于云效构建部署NodeJS项目到ACK

准备工作 01、编写Dockerfile文件可以根据不同的环境&#xff0c;新建不同的Dockerfile文件&#xff0c;比如Dockerfile-PROD # Deliver the dist folder with NginxFROM nginx:stable-alpine ENV LANGC.UTF-8 ENV TZAsia/ShanghaiCOPY dist/ /usr/share/nginx/html COPY ngi…

speexsdp消除回声

speexsdp需要几秒的滤波时间。我测试4-7秒。 GitHub - cpuimage/WebRTC_AECM: Acoustic Echo Canceller for Mobile Module Port From WebRTC 更快的消除 webrtc_aecm 效果: 这是testecho.c样例的程序。 初始化函数&#xff1a; SpeexEchoState *speex_echo_state_init(in…

uniapp开发DAPP钱包应用(一) 环境搭建 Vue+ MetaMask + ABI.json

上几节我们讲了如何通过Java后端完成链上交易、信息查询、以及如何使用web3插件实现开发自测。 这一节&#xff0c;我们来说说前端DAPP的开发实现。 1. MeteMask &#x1fa9c;Java对接&#xff08;BSC&#xff09;币安链 | BNB与BEP20的开发实践&#xff08;三&#xff09;水…

Vue3全家桶 - VueRouter - 【6】导航守卫

导航守卫 查看以下情形&#xff1a; 点击主页链接时&#xff0c;默认情况下可直接进入指定页面&#xff0c;如下图&#xff0c;但是问题是该跳转的界面是需要用户登录后方可访问的&#xff1b; 可设置导航守卫来检测用户是否登录&#xff0c;如果已登录&#xff0c;则进入后台…

华为OD机试 - 模拟数据序列化传输(Java JS Python C C++)

题目描述 模拟一套简化的序列化传输方式,请实现下面的数据编码与解码过程 编码前数据格式为 [位置,类型,值],多个数据的时候用逗号分隔,位置仅支持数字,不考虑重复等场景;类型仅支持:Integer / String / Compose(Compose的数据类型表示该存储的数据也需要编码)编码后数…

四元数(Quaternion)的一些性质

四元数(Quaternion)是用于三维旋转和定向的四部分组成的超复数&#xff0c;超复数简单理解就是比abi这样的复数更复杂的复数&#xff0c;其中abi这样的复数我们也可以叫做二元数&#xff0c;表示复平面的一点&#xff0c;对于熟悉欧拉公式的朋友就知道&#xff0c;也可以看成是…

Sui与数据平台ZettaBlock达成合作,为其公测提供数据

Sui一向以闪电般的速度、无限水平扩展著称&#xff0c;现已迅速成为DeFi活动的重要场所。近期&#xff0c;数据平台ZettaBlock宣布在其开创性的Web3数据平台发布中&#xff0c;选择Sui作为基础集成合作伙伴之一。在ZettaBlock的开放测试版发布之际&#xff0c;构建者和开发者将…

双指针算法练习

27. 移除元素 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑…

JS 事件捕获、事件冒泡、事件委托

js事件机制在开发中可以说时刻使用&#xff0c;例如dom绑定事件、监听其自身事件等。js事件机制有事件捕获、事件冒泡俩种机制&#xff0c;我们分别说下这俩种机制的使用场景。 一、概念 事件捕获顺序如下&#xff1a; window > document > body > div 事件冒泡顺序…

Using WebView from more than one process

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、问题过程源码追踪…