Redis的数据持久化(概念版)

前言

本文主要介绍Redis的三种持久化方式、AOF持久化策略等

什么是持久化

持久化是指将数据在内存中的状态保存到非易失性介质(如硬盘、固态硬盘等)上的过程。在计算机中,内存中的数据属于易失性数据,一旦断电或重启系统,这些数据将会丢失。

Redis中的持久化

我们可以知道Redis是基于内存存储数据的一个中间件,他的数据是保存在内存中的,如果重启将面临数据丢失的风险,那么为了解决这个风险就必须进行对数据的持久化的保存,也就是得把数据从内存中拷贝到磁盘中进行维护。

在Redis中,持久化可以选择使用下面三种中的一种方式进行

1. 快照方式(RDB,Redis Database):将某一个时刻的数据,以二进制的方式写入磁盘
2. 文件追加方式(AOF,Append Only File):记录所有写操作命令,并以文件的形式追加到持久化文件中
3. 混合持久化方式:Redis4.0中新增的方式,结合RDB和AOF二者的优点,将当前数据以二进制写入到文件开头,后续执行的命令以AOF格式追加到文件中,这样不仅保证了Redis启动速度,又降低了数据丢失的风险

RDB 与 AOF 的特点及其二者区别

RDB

  • 工作原理: RDB是快照方式记录,将当前Redis中的数据以压缩二进制的形式写入到硬盘文件中,每次写入都是覆盖写入,代表了某个时间点的数据
  • 优点:
    • 效率高: 因为是二进制文件,可以被机器直接识别,没有翻译过程,恢复速度快
    • 文件较小: 相比于AOF,RDB文件体量更小
  • 缺点
    • 数据丢失: 由于RDB是快照的形式保存数据,如果快照之间发生故障,那么可能导致部分数据丢失(没来及全部备份,甚至说还没备份就故障了)

    • AOF

  • 工作原理: AOF是将Redis的写操作以日志的形式,将数据以追加的形式补充到日志文件中,在需要数据恢复时,通过复现文件中的命令来实现日志恢复
  • 优点:
    • 数据完整性好: AOF是以追加的方式写入日志文件中,通常比RDB保存的数据更为可靠,数据丢失率低
    • 可读性高: 因为是写入执行命令,更方便维护人员进行阅读维护
    • 多种持久化策略: 提供多种持久化策略,可以根据不同场景选择合适的一种方式
  • 缺点:
    • 文件较大: 因为是追加的形式上进行写,所以随着时间的增加,文件会越来越大
    • 对磁盘写入频繁: AOF持久化需要频繁的写入日志文件,对磁盘造成一定的写入压力

AOF的3种持久化策略

Always: 将每个写操作都追加到AOF文件中,即使是小的操作也会被追加。这是最安全的策略,可以确保数据的实时持久化,但也会带来较高的IO负载和磁盘空间占用。

Everysec: 每秒将写操作追加到AOF文件中。Redis会在每秒钟的间隔内将多个写操作合并到一起,并一次性将它们追加到AOF文件中。这种策略可以在一定程度上平衡数据的实时性和性能开销。

No: 不对AOF文件进行同步操作,由操作系统来处理文件的同步和持久化。这种策略会带来最高的性能,但也是最不安全的,如果发生突发性的故障,可能会导致数据的丢失和不一致。Linux默认30秒写入数据到磁盘

在以上三种策略中,默认情况下Redis使用的是"Everysec"策略,它在实践中提供了较好的性能和可靠性的平衡。

以上是本文全部内容
感谢阅读

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

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

相关文章

vue uniapp 防止按钮多次点击(类似于防抖节流)

common文件并创建anti-shake.js文件 // 防止处理多次点击 function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数, info是点击需要传的参数let that this;if (that.noClick) {// 第一次点击that.noClick false;if(info && inf…

Spring6.0官方文档示例:(27)配置文件中bean定义的继承关系

一、实体类 package cn.edu.tju.domain;public class DerivedTestBean {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {t…

洗涤护理门店小程序DIY制作教程

随着移动互联网的快速发展,小程序成为了各行各业推广和服务的新平台。对于干洗店来说,拥有一个专属的洗护小程序不仅可以提升用户体验,还能增加店铺的曝光度和销售额。那么,如何DIY制作一个干洗店洗护小程序呢? 首先&a…

SpringBoot利用ConstraintValidator实现自定义注解校验

一、前言 ConstraintValidator是Java Bean Validation(JSR-303)规范中的一个接口,用于实现自定义校验注解的校验逻辑。ConstraintValidator定义了两个泛型参数,分别是注解类型和被校验的值类型。在实现ConstraintValidator接口时&…

Android中正确使用Handler的姿势

在Android中,Handler是一种用于在不同线程之间传递消息和任务的机制。以下是在Android中正确使用Handler的一些姿势: 1. 在主线程中创建Handler对象 在Android中,只有主线程(也称为UI线程)可以更新UI。因此&#xff…

控制Unity发布的PC包的窗体

大家好,我是阿赵。   用Unity发布PC包接入某些渠道时,有时候会收到一些特殊的需求,比如控制窗口最大化(比如某些情况强制显示窗体)、最小化(比如老板键)、强制规定窗体置顶等。虽然我一直认为这些需求都是流氓软件行为,但作为一…

【微信小程序】小程序之间的跳转方式总结

想要从该小程序跳转到其他小程序怎么做? 方式 小程序之间的跳转方法有: wx.navigateTo:保留当前页面,跳转到应用内的某个页面,然后从该页面返回上一页的时候使用wx.navigateBack返回。wx.switchTab:跳转…

基于Spark+django的国漫推荐系统--计算机毕业设计项目

近年来,随着互联网的蓬勃发展,企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,基…

【Java架构-包管理工具】-Maven基础(一)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具,在此咱们由浅入深,分三篇文章(Maven基础、Maven进阶、私服搭建)来深入学习Maven,此篇为开篇主要介绍Maven概念、模型、安装配置、基本命令 文章目录 本文…

动态规划入门之洛谷创始人kk偷懒摆烂

P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这个题目的难点在于我们该怎么尽量让左右大脑均分题目时间呢,我们这样想,我们先将所有题目的时间总和累加起来,取其一半。我们知道如果将这n道题目进行时间的尽量…

DP读书:鲲鹏处理器 架构与编程(十)鲲鹏软件生态与云服务

十秒带你了解鲲鹏软件生态与云服务 鲲鹏软件生态与云服务ARM授权机制在传统的PC领域,半导体厂商的业务类型主要分为两种:在移动领域, ARM服务器生态鲲鹏服务器软件生态1. 鲲鹏计算产业2. 鲲鹏软件生态兼容性3. openEluer操作系统4. 鲲鹏软件栈…

Nexus(Maven管理器)下载和安装

我们以 Nexus 2.x 为例,演示 Nexus 的安装过程。 官方下载地址 1. 进入 Nexus 2.x 下载页面,根据本机操作系统,选择对应的版本进行下载,如下图所示。 2. 将下载 Nexus 安装包解压到本地磁盘,可获得 nexus-2.14.20-0…

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

【c语言】文件操作 万字详解

目录 一,为什么使用文件 二,什么是文件 1,程序文件 2,数据文件 3,文件名 三,文件的打开和关闭 1,文件指针 2,文件的打开和关闭 四, 文件的顺序读写 1,顺序…

stm32控制蜂鸣器源代码(附带proteus线路图)

说明: 1 PB0输出0时,蜂鸣器发生; 2 蜂鸣器电阻值如果太大会导致电流太小,发不出声音; 3蜂鸣器额定电压需要设置得低一点,可以是2V,但不能高于3V,这更右上角的电阻值有关系&#x…

【算法专题突破】双指针 - 移动零(1)

目录 写在前面 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 写在前面 在进行了剑指Offer和LeetCode hot100的毒打之后, 我决心系统地学习一些经典算法,增强我的综合算法能力。 1. 题目解析 题目链接:283. 移动零 - 力…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆?如何克隆浅克隆深克隆 Java设计模式什么是设计模式?为什么要学习设计模式? 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

无涯教程-PHP - 移除的扩展

以下扩展已从PHP 7开始删除- eregmssqlmysqlsybase_ct 以下SAPI已从PHP 7开始删除- aolserverapacheapache_hooksapache2filtercaudiumcontinuityisapimilternsapiphttpdpi3webroxenthttpdtuxwebjames PHP - 移除的扩展 - 无涯教程网无涯教程网提供以下扩展已从PHP 7开始删除…

【SVN内网穿透】远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

jvm-运行时数据区概述及线程

1.运行时数据区内部结构 不同的jvm对于内存的划分方式和管理机制存在着部分差异 java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁,另外一些则是与线程一一对应的&…