Redis_事务操作

13. redis事务操作

13.1事务简介

原子性(Atomicity)
一致性(Consistency)
隔离性(isolation)
持久性(durabiliby)
ACID

13.2 Redis事务

提供了multi、exec命令来完成

  • 第一步,客户端使用multi命令显式地开启事务
  • 第二步,客户端把事务中要执行的指令发送给服务器端,例如set 、get 、lpush,这些指令不会立即执行,进入一个队列中
  • 第三步,客户端向服务器发送一个命令 exec,来完成事务提交。当服务器端收到这个指令后,实际去执行上一步中的命令队列.
    multi
    set k1 v1
    set k2 v2
    set k3 v3
    get k1
    exec
    multi
    set k4 v4
    set k5 v5
    discard //取消
    

13.3 Redis的事务处理机制

13.3.1 原子性

第一种情况

  • 在执行exec指令前,客户端发送操作命令有误,redis会报错并记录这个错误。此时,还可以继续发送命令操作,在执行exec命令之后,redis拒绝执行所有提交的指令,返回事务失败的结果。(保证了原子性)
    multi
    set k1 v1
    get k1 v1
    set k2 v2
    exec
    整个队列失败
    

第二种情况

  • 向服务器发送指令,其中有指令和操作的数据类型不匹配,放入队列时并没有报错。使用lpop指令操作失败,但get指令成功了。(不能保证原子性)
    multi
    lpop k1 //失败
    get k1 //成功
    exec
    

第三种情况

  • 在执行事务的exec指令时,redis实例发生了故障,导致事务执行失败
  • 如果redis开启了aof日志,可能会有一部分指令被记录到AOF日志中,需要使用redis-check-aof 去检查aof文件,将未完成事务操作从aof清除,从而保证原子性

13.3.2 一致性

  • 第一种情况,指令进入队列时就报错,整个事务全部被放弃执行,可以保证数据的一致性。
  • 第二种情况,进入队列时没有报错,实际执行时报错,有错误的指令不去执行,正确的指令可以正常执行,可以保证数据的一致性
  • 第三种情况,exec指令时redis实例发生故障,根据RDB和AOF情况来做判断
    • 如果没有开启rdb和aof,数据在重启后没有,一致的
    • 如果使用了rdb方式,rdb不会在事务执行的时候去保存数据,数据库也是一致的
    • 使用aof日志,如果事务队列操作记录没有进入aof,可以保证一致性。如果已加入了一部分,使用redis-check-aof清除事务中已完成的操作,保证事务的一致性

13.3.3 隔离性

提交exec指令去执行事务,分成exec之前和exec之后两种情况
并发操作在exec指令前,要实现隔离性的保证 ,需要使用watch机制,否则不能保证隔离性
在事务执行前,相当于有一个监控器,在监控key是否已经被修改过了,如果已修改,则放弃事务执行,避免了事务的隔离性被破坏。如果客户再次执行,此时,没有其他客户端去修改数据,则执行成功。
悲观锁:synchronized
乐观锁:Atomic原子操作
在这里插入图片描述

使用unwatch取消watch命令对所有key的监控。

13.3.4 持久性

redis内存数据库,取决于持久化配置模式
不开启rdb和aof,只当作缓存使用,是不能保证持久性
使用rdb,如果在一个事务执行后,下一次的rdb快照还未执行前,redis实例发生故障了,不能保证持久性
使用aof, 配置选项 everysec、always、no,也不能保证持久性
不管redis采用什么配置模式,都不能保证事务的持久性

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

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

相关文章

前沿分享-通过经皮神经刺激来治疗糖尿病神经性疼痛

经皮神经电刺激(PENS)设备用于对糖尿病周围神经病变引起的慢性、顽固性疼痛进行多次治疗。 放在耳朵上的这种可穿戴设备在几天内持续提供低水平的脉冲电流。 这是一种安全有效的非麻醉性替代治疗慢性疼痛的方法。还有一张设备放在糖足上的照片&#xff0…

向量数据库 Milvus Cloud Partition Key:租户数量多,单个租户数据少的三种解决方案

三种解决方案 这个问题提出的时候,Milvus 的最新版本是 2.2.8,我们做个角色互换,在当时站在这个用户的角度,留在我们面前的选择有这么几个: 为每个租户创建一个 collection 为每个租户创建一个 partition 创建一个租户名称的标量字段 接下来,我们依次分析下这三种方案的可…

《零基础实践深度学习》(第2版)学习笔记,(五)深度学习与计算机视觉

文章目录 1. 计算机视觉概述2. 图像分类3. 目标检测 1. 计算机视觉概述 图像分类 目标检测 2. 图像分类 3. 目标检测

01-C++数据类型

3、基础类型 3.1、简单变量 变量的命名 carDrip和cardRip 或boat_sport和boats_port 此外,还有有前缀的命名,使用前缀表示数据类型。常见的前缀有:str(表示字符串)、n(表示整数值)、b(表示…

深入探究QCheckBox的三种状态及其用法

文章目录 引言:三种状态一、未选中状态(0):二、选中状态(2):三、部分选中状态(1): 判断方法结论: 引言: QCheckBox是Qt框架中常用的复…

html css实现爱心

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 爱心 */.lo…

结构体的定义与赋值

1、结构体定义 首先定义一个学生结构体&#xff0c;如下所示&#xff1a; struct Student {int num;char name[32];char sex;int age; }; 接着在主函数中对学生进行声明&#xff0c;如下所示&#xff1a; #include<iostream> using namespace std;struct Student {in…

直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件

摘要 当使用 Vue.js 的 CDN 来实现一个简单的上传图片组件时&#xff0c;你可以利用 Vue 的数据绑定和事件处理能力&#xff0c;结合 HTML 和 CSS&#xff0c;轻松地创建一个交互式的图片上传界面。以下是一个示例&#xff1a; 代码结构 index.html <!DOCTYPE html> &…

Rust 重载运算符|复数结构的“加减乘除”四则运算

复数 基本概念 复数定义 由实数部分和虚数部分所组成的数&#xff0c;形如a&#xff0b;bi 。 其中a、b为实数&#xff0c;i 为“虚数单位”&#xff0c;i -1&#xff0c;即虚数单位的平方等于-1。 a、b分别叫做复数a&#xff0b;bi的实部和虚部。 当b0时&#xff0c;a&…

前后端分离------后端创建笔记(06)新增接口页面布局

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

Azure添加网络接口

添加网络接口的意义 在 Azure 上&#xff0c;为虚拟机添加网络接口的意义包括以下几个方面&#xff1a; 扩展网络带宽&#xff1a;通过添加多个网络接口&#xff0c;可以增加虚拟机的网络带宽&#xff0c;提高网络传输速度和数据吞吐量。实现网络隔离&#xff1a;每个网络接口…

zabbix-6.4 监控 MySQL

目录 1、rpm安装zabbix_agentd服务 2、编写zabbix_agentd.conf文件 3、编写模板文件 4、创建mysql用户并赋权限 5、创建.my.cnf文件 6、将规则添加到SELinux策略中 注意&#xff1a; 若模板无法读取.my.cnf 信息&#xff0c;从而导致监控报错&#xff0c;可以尝试修改模…

别人直播的时候怎么录屏?分享一些录屏方法

​随着互联网的快速发展&#xff0c;直播已经成为人们日常生活中不可或缺的一部分。但是&#xff0c;有时候我们可能会错过某些重要的直播内容&#xff0c;这时候就需要录屏来保存和观看。那么&#xff0c;如何录屏别人的直播呢&#xff1f;本文将分享一些录屏方法和技巧&#…

【Python机器学习】实验11 神经网络-感知器

文章目录 人工神经网络感知机二分类模型算法 1. 基于手写代码的感知器模型1.1 数据读取1.2 构建感知器模型1.3 实例化模型并训练模型1.4 可视化 2. 基于sklearn的感知器实现2.1 数据获取与前面相同2.2 导入类库2.3 实例化感知器2.4 采用数据拟合感知器2.5 可视化 实验1 将上面数…

SpringBoot复习:(50)TransactionManager是哪里来的?是什么类型的?

运行结果&#xff1a; 可见它的类型是DataSourceTransactionManager.它是通过自动配置创建的。

pdf怎么压缩?一分钟学会文件压缩方法

PDF文件过大一般主要原因就是内嵌大文件、重复的资源或者图片比较多&#xff0c;随之而来的问题就是占用存储空间、被平台限制发送等等&#xff0c;这时候我们可以通过压缩的方法缩小PDF文件大小&#xff0c;下面就一起来看看具体的操作方法吧。 方法一&#xff1a;嗨格式压缩大…

【系统架构设计专业技能 · 软件工程之系统分析与设计(二)【系统架构设计师】

系列文章目录 系统架构设计专业技能 软件工程&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;…

推断统计(独立样本t检验)

这里我们是采用假设检验中的独立样本t 检验来比较两个独立正态总体均值之间是否存在显著性差异&#xff0c;以比较城市与农村孩子的心理素质是否有显著差异为例 。 这里我们首先是假设城市孩子与农村孩子心理素质无显著差异&#xff0c;但是此时方差是否齐性是未知的&#xff0…

【MySQL】MySQL不走索引的情况分析

未建立索引 当数据表没有设计相关索引时&#xff0c;查询会扫描全表。 create table test_temp (test_id int auto_incrementprimary key,field_1 varchar(20) null,field_2 varchar(20) null,field_3 bigint null,create_date date null );expl…

ffmpeg命令行是如何打开vf_scale滤镜的

前言 在ffmpeg命令行中&#xff0c;ffmpeg -i test -pix_fmt rgb24 test.rgb&#xff0c;会自动打开ff_vf_scale滤镜&#xff0c;本章主要追踪这个流程。 通过gdb可以发现其基本调用栈如下&#xff1a; 可以看到&#xff0c;query_formats&#xff08;&#xff09;中创建的v…