【技术栈】Redis 中的事务及持久化方式

SueWakeup

                                                      个人主页: SueWakeup

                                                      系列专栏:学习技术栈

                                                      个性签名:保留赤子之心也许是种幸运吧

本文封面由 凯楠📸 友情提供

目录

 相关传送门

1. Redis 中的事务 

 2. Redis 持久化

2.1 RDB 方式

2.1.1 RDB手动

2.1.2 RDB自动

2.2 AOF方式

2.2.1 AOF执行过程

2.2.2 AOF写数据的策略

2.2.3 AOF相关配置

2.2.4 AOF写数据遇到的问题

2.2.5 AOF重写

2.2.6 AOF重写规则

2.2.7 AOF重写方式

2.2.8 RDB 和 AOF 的区别

 注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况,请谅解,点击侧栏目录进行跳转   


 本栏传送门

1.【技术栈】Redis 的理解与数据存储格式

2.【技术栈】Redis 中的事务及持久化方式

3.【技术栈】Redis 删除策略

4.【技术栈】Redis 企业级解决方案

5.【数据结构】布隆过滤器

6.【开发】SpringBoot 整合 Redis

7.【技术栈】Spring Cache 简化 Redis 缓存使用


1. Redis 中的事务 

概念:Redis事务中的所有命令都会序列化、按顺序的执行。

事务在执行的过程中不会被其他客户端发送来的命令请求所打断。

主要作用:串联多个命令防止别的命令插队

特点:

  1. Redis事务没有隔离级别的概念
  2. 所有的命令在事务中,没有被直接执行,只有发起执行命令的时候才会执行
  3. Redis单条命令保存原子性,但是事务不保证原子性

常用命令:

  1. multi:标记一个事务的开始
  2. exec:执行所有事务块内的命令
  3. discard:取消事务,放弃执行事务块内的所有命令
  4. watch key:监视一个或多个key,如果在事务执行之前这些key被其他命令所改动,那么事务将被打断。
  5. unwatch:取消watch命令对所有key的监视

为什么添加事务?

  • 悲观锁:每次在拿取数据的时候都会上锁,其他请求想获取这个数据就会block直到它拿到锁。传统的关系型数据库里就用到了很多这种锁机制,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁
  • 乐观锁: 每次在拿取数据的时候不会上锁,但是在更新的时候会判断一下在此期间别人有没有更新数据;适用于多读的应用类型,可以提高吞吐量。Redis 就是利用这种 check-and-set 机制实现事务的。

 2. Redis 持久化

Redis是内存数据库,一旦服务器进程退出,服务器中的数据库状态也会消失,所以需要Redis持久化

持久化过程:

  • RDB:将当前数据状态进行保存,快照形式存储数据结果,存储格式简单,关注点在数据
  • AOF:将数据的操作过程进行保存,日志形式存储操作过程,关注点在数据库的操作过程

2.1 RDB 方式

2.1.1 RDB手动

命令:save

作用:手动执行一次保存操作

配置:

  • dbfilename dump.rdb

说明:设置本地数据库文件名,默认值为dump.rdb

经验:通常设置为 dump-端口号.rdb

  • dir

说明:设置存储.rdb文件的路径

经验:通常设置成存储空间较大的没目录中,目录名称为data

  • rdbcompression yes

说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF算法压缩

经验:通常默认为开启状态,如果设置为no,可以节省cpu运行时间,但会使存储的空间变大

  • rdbchecksum yes

说明:设置是否进行CRC64算法RDB文件格式校验,该校验过程在写文件和读文件过程均进行

经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存在一定的数据损害风险

save指令工作原理(单线程任务执行序列)

客户端1 127.0.0.1:6379>set key1 value1

客户端2 127.0.0.1:6379>set key2 value2

客户端3 127.0.0.1:6379>save

客户端4 127.0.0.1:6379>get key

对redis数据库执行4此指令顺序===> set set save get

注意:save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻 塞,线上环境不建议使用

  • bgsave指令

命令 :bgsave

作用 :手动启动后台保存操作,但不是立即执行

注意: bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方 式,save命令可以放弃使用

  • fork

Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

2.1.2 RDB自动

配置 :save second changes

作用 : 满足限定时间范围内key的变化数量达到指定数量即进行持久化

参数 :

second:监控时间范围

changes:监控key的变化量

位置 : 在conf文件中进行配置

注意:

  • save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的
  • save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系
  • save配置启动后执行的是bgsave操作

优点:

  1. 紧凑压缩的二进制文件,存储效率高,节省磁盘空间,恢复数据速度比AOF快
  2. 内部存储redis在某个时间点的数据快照,适合用于数据备份

缺点:

  1. Redis在fork时使用了写时拷贝技术,内存中的数据被克隆了一份,数据庞大会消耗性能
  2. 无法做到实时持久化,较大的可能丢失数据
  3. 版本不统一,不同版本之间存在兼容问题

2.2 AOF方式

概念: 以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令 达到恢复数据的目的;

主要作用:解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

2.2.1 AOF执行过程

客户端的请求写命令会被append追加到AOF缓冲区内;

AOF缓冲区根据AOF持久化策略将操作同步到磁盘的AOF文件

AOF文件大小超过重写策略或手动重写时,会对AOF文件重写,压缩AOF文件容量

Redis服务重启时,会重新加载AOF文件中的写操作达到数据恢复的目的;

2.2.2 AOF写数据的策略

  • always每次:每次写入操作均同步到AOF文件中,数据零误差,性能较低

  • everysec每秒:每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高

    在系统突然宕机的情况下丢失1秒内的数据

  • no系统控制:由操作系统控制每次同步到AOF文件的周期,过程不可控

2.2.3 AOF相关配置

配置 :appendonly yes|no

作用 :是否开启AOF持久化功能,默认为不开启状态

配置 :appendfsync always|everysec|no

作用 :AOF写数据策略

配置:appendfilename filename

作用:AOF持久化文件名,默认文件名未appendonly.aof,建议配置为appendonly-端口号.aof

配置:dir

作用 :AOF持久化文件保存路径,与RDB持久化文件保持一致即可

2.2.4 AOF写数据遇到的问题

2.2.5 AOF重写

随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。

将对同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录

作用:

  • 降低磁盘占用量,降低持久化写时间,降低数据恢复用时
  • 提高磁盘利用率,提高持久化效率,提高IO性能,提高数据恢复效率

2.2.6 AOF重写规则

进程内已超时的数据不再写入文件

忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令

对同一数据的多条写命令合并为一条命令

为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元 素

AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)

2.2.7 AOF重写方式

手动重写 bgrewriteaof

自动重写

触发机制:何时重写 Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发;重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担 的,因此设定Redis要满足一定条件才会进行重写

auto-aof-rewrite-min-size 设置重写的基准值,最小文件64MB。达到这个值开始重写。

auto-aof-rewrite-percentage 设置重写的基准值,文件达到100%时开始重写(文件是原 来 重写后文件的2倍时触发

2.2.8 RDB 和 AOF 的区别

持久化方式RDBAOF

占用存储空间

小(数据级:压缩)

大(指令级:重写)

存储速度

快 

恢复速度

数据安全性

会丢失数据依据策略决定

资源消耗

重量级轻量级

启动优先级

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

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

相关文章

跨越时空的纽带:探索Facebook如何连接人与人

引言 Facebook作为全球最大的社交媒体平台之一,已经成为了人们日常生活中不可或缺的一部分。它不仅仅是一个社交网络,更是连接人与人、人与世界的纽带。在这篇文章中,我们将深入探讨Facebook如何跨越时空,连接人与人之间的关系&a…

Flutter 初始WidgetState 简单应用案例分析

本系列文章主要整理Flutter的知识汇总,由浅入深,从Widget的搭建到其中的原理。本文还是围绕Widget在开发中应用和理解。 关于Flutter环境配置和首次创建可以参考前面文章。链接如下: Flutter 安装部署与认识Dart语言 Flutter 使用AndroidS…

Spring Cloud 整合 GateWay

目录 第一章 微服务架构图 第二章 Spring Cloud整合Nacos集群 第三章 Spring Cloud GateWay 第四章 Spring Cloud Alibaba 整合Sentinel 第五章 Spring Cloud Alibaba 整合SkyWalking链路跟踪 第六章 Spring Cloud Alibaba 整合Seata分布式事务 第七章 Spring Cloud 集成Auth用…

多模匹配算法AC算法和单模匹配算法BM

多模匹配算法之AC算法详解 算法概述  Aho-Corasick算法 - 这是一种字典匹配算法,它用于在输入文本中查找字典中的字符串。时间复杂度是线性的。该算法应用有限自动机巧妙地将字符比较转化为了状态转移。  该算法的基本思想 − 在预处理阶段,AC自动机算法建立…

Springboot通过注解+切面实现接口权限校验

Springboot通过注解+切面实现接口权限校验 主要说一下在对接口请求时,如何用注解切面去拦截校验当前登录用户是否有访问权限 1.首先创建注解 HasPermission ,跟普通注解创建方式基本一致 Retention(RetentionPolicy.RUNTIME) Target(Element…

小火星露谷管理器 报错:“你似乎没有安装Edge的webview2”

错误 解决办法 你可以到这个地方下载安装webview2 https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/?formMT00IS

2024年亚洲图像处理趋势会议(ATIP 2024)即将召开!

2024年亚洲图像处理趋势会议(简称:ATIP 2024)将于2024年6月21日至23日在英国伦敦举行。在会议上我们将与相关领域的研究人员和知名专业人士共同讨论关于图像处理学科的最新研究方向及进展,评估当前最先进的技术和未来研究的关键领…

Tomcat(Win+Linux)安装教程

Windows环境安装 Tomcat安装及配置教程主要分为四步: 步骤一:确认自己是否已 安装JDK🔍 步骤二:下载安装Tomcat 步骤三:Tomcat配置环境变量 步骤四:验证Tomcat配置是否成功 OK,我们开始&#x…

数据库基本介绍及编译安装mysql

目录 数据库介绍 数据库类型 数据库管理系统(DBMS) 数据库系统 DBMS的工作模式 关系型数据库的优缺点 编译安装mysql 数据库介绍 数据:描述事物的的符号纪录称为数据(Data) 表:以行和列的形式组成…

python大学生健身爱好者交流网站flask-django-nodejs-php

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于python技术、django/flask框架、B/S机构、Mysql数据…

【No.13】蓝桥杯二分查找|整数二分|实数二分|跳石头|M次方根|分巧克力(C++)

二分查找算法 知识点 二分查找原理讲解在单调递增序列 a 中查找 x 或 x 的后继在单调递增序列 a 中查找 x 或 x 的前驱 二分查找算法讲解 枚举查找即顺序查找, 实现原理是逐个比较数组 a[0:n-1] 中的元素,直到找到元素 x 或搜索整个数组后确定 x 不在…

linux网络服务学习(1):nfs

1.什么是nfs NFS:网络文件系统。 *让客户端通过网络访问服务器磁盘中的数据,是一种在linux系统间磁盘文件共享的方法。 *nfs客户端可以把远端nfs服务器的目录挂载到本地。 *nfs服务器一般用来共享视频、图片等静态数据。一般是作为被读取的对象&…

国内git最新版本下载链接2.44

git官网地址:Git - Downloading Package (git-scm.com) 蓝奏云: ​​​​​​gGit-2.44.0-64-bit.exe - 蓝奏云 git仓库地址:git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via …

算法笔记p251队列循环队列

目录 队列循环队列循环队列的定义初始化判空判满入队出队获取队列内元素的个数取队首元素取队尾元素 队列 队列是一种先进先出的数据结构,总是从队尾加入元素,从队首移除元素,满足先进先出的原则。队列的常用操作包括获取队列内元素的个数&a…

Typecho博客后台登陆界面美化

登录界面: 食用方法: 备份 admin 目录 压缩包内容上传到 admin 目录内。 结构:网站根目录 /admin/login.php 结构:网站根目录 /admin/style 修改 login.php 第35行,把“季春二九管理后台”替换成自己的信息 清理缓存,开始体验新的…

释放创造力,Nik Collection 6 by DxO 点亮你的视觉世界

在数字摄影时代,后期处理是提升摄影作品品质的重要环节。而Nik Collection 6 by DxO作为一套优秀的滤镜插件套装,不仅为摄影师提供了丰富的后期处理工具,更让他们能够释放无限的创造力,打造出惊艳的视觉作品。 Nik Collection 6 …

虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N (元)进行投资,能接受的总风,险值为X。 你要在可接…

WanAndroid(鸿蒙版)开发的第六篇

前言 DevEco Studio版本:4.0.0.600 WanAndroid的API链接:玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考: 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

Android Studio实现内容丰富的安卓视频管理平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号081 1. 开发环境 android stuido 2.功能介绍 安卓端: 1.注册登录 2.本地视频 3.视频播放 4.收藏功能 5.网路视频 6.个人中心 7.我的收藏 8.浏览历史 3.系…

Java设计模式 | 简单工厂模式

概述 需求 设计一个咖啡店点餐系统设计一个咖啡类(Coffee);并定义其两个子类(美式咖啡AmericanCoffee和拿铁咖啡LatteCoffee);再设计一个咖啡店类(CoffeeStore),其具备…