redis运维(十七)事务

一  redis事务

事务核心参考

①   基础概念

1、场景'引入'核心:通过现象'思考原因'?

2、'事务'的概念

3、事务'四大'特性说明: redis只'具备部分'特性

重点1: '原子性'和'一致性'

重点2: '隔离性'和'持久性'

②   redis的事务

1、'基础'铺垫备注: redis提供了'简单的事务',不支持'事务回滚'

2、redis的'事务'命令核心点:1、在一个'客户端'操作的时候,把'所有的指令'一次性按照'顺序'放在一个'队列'中2、执行完了之后再让'其他的客户端'操作

事务相关的命令

1、multi  -->  '开启事务',标记一个'事务块的开始'备注: 设定事务的'开启 start'位置,此指令执行后,'后续的所有指令'均加入到'事务'中2、exec   -->  '执行事务'作用:设定事务的'结束 end'位置,同时执行事务,与multi '成对'出现,成对使用备注1:若在'事务队列'中存在'命令性'错误,则'执行EXEC'命令时,所有命令'都不会'执行备注2:若在事务队列中存在'语法性'错误,则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常也即:已经'执行完毕的命令'对应的数据'不会自动回滚',需要程序员'自己在代码中'实现回滚3、discard作用: 终止'当前事务的定义',发生在'multi之后',exec之'前'场景: 你在命令入队列的时候,发现你有些命令指令输入错误,你不想执行了,这个时候,你不想提交事务了

备注:1、mysql的commit是'先执行'了,然后'又回滚'了2、而redis的'discard'是取消redis服务器'暂存队列'的内容,'不执行'QUEUED : '队列'

备注:1、虽然'将命令序列化后'发给redis服务器,但是redis'并没有'执行2、而是放在一个'独立的暂存区域[队列中]'3、只有'客户端'发送'EXEC'的命令,对于redis就是一个信号,redis服务器端'才会执行'.缺点:每次发送命令都会'进行一个I/O操作',在服务器进行'多个命令'打包

③   事务特殊情况

1、'语法 synax'错误

说明: '报错时',所有的命令'都不会'执行,'完全回滚'命令'语法'错误: 一个事务中的'多个命令'都'不会'执行备注: '语法'错误,redis-cli客户端会'进行校验'

2、'类型操作'错误备注: 在'类型'执行时'报错',这时一个事务中的'多个命令','对的会执行','错的不会'执行

说明: redis只有'在服务器端执行'才知道'是否错误'常见: 1、incr email 'email'不是'整数'类型2、number 不是 'list'列表类型

④  事务小结

⑤  事务的工作流程

一个事务'从开始到结束'通常会进过以下'三个'阶段:(1)事务开始 (2)命令入队 (3)事务执行

百度二面:谈谈你对Redis事务的理解

⑥  watch

说明: watch 监控key备注: redis使用watch来提供'乐观锁',类似 'cas(check and set)'

乐观锁

乐观锁version和时间戳外的实现方式

乐观锁的version和timestamp

分布式锁和消息队列

思考: 乐观锁'乐观在哪'?

redis 锁和分布式锁 

1、'不开启'watch监控时,事务中的key被修改'不影响事务'的执行2、'开启'watch监控时,'事务中的key被修改'影响'事务的执行'  --> '案例演示'

结果:1、由于在'redis-cli'中的 'key k1'被'watch'监控2、另一个redis客户端'修改k1后',再'执行事务'修改k1,则整个事务中的所有命令'都不会'执行补充: unwatch '取消监控key'

⑦  并发竞争key

分布式锁和消息队列

核心点: 体会'设计'思路

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

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

相关文章

王道p150 20.将给定的表达式树转化为等价的中缀表达式(通过括号反应操作符的计算次序)

本题代码如下 void btreetoexp(tree t, char deep) {if (t NULL)return;else if (t->lchild NULL && t->rchild NULL)printf("%c", t->data);//输出操作数,不加括号else {if (deep > 1)printf("(");btreetoexp(t->l…

『 C++类与对象 』多态之单继承与多继承的虚函数表

文章目录 🫧 前言🫧 查看虚表🫧 单继承下的虚函数表🫧 多继承下的虚函数表 🫧 前言 多态是一种基于继承关系的语法,既然涉及到继承,而继承的方式有多种: 单继承多继承棱形继承棱形虚拟继承 不同的继承方式其虚表的形…

外部网关协议_边界网关协议BGP

一.边界网关协议BGP的基本概念 边界网关协议(Border Gateway Protocol,BGP)属于外部网关协议EGP这个类别,用于自治系统AS之间的路由选择协议。由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于…

qml ParticleSystem3D使用介绍

在 Qt Quick 3D 中,ParticleSystem3D 是用来创建和控制3D粒子系统的元素。粒子系统是图形编程中用于模拟液体、烟雾、火、星空等现象的技术,它通过生成大量小粒子来模拟这些效果。ParticleSystem3D 提供了一个框架,允许开发者定义粒子的各种属性,如生命周期、速度、颜色、大…

连接的原理(待修改)

搞数据库⼀个避不开的概念就是Join,翻译成中⽂就是连接。 相信很多⼩伙伴在初学连接的时候有些⼀脸懵逼,理解了连接的语义之后⼜可能不明⽩各个表中的记 录到底是怎么连起来的,以⾄于在使⽤的时候常常陷⼊下边两种误区: 误区⼀&…

C++初阶 类和对象(上)

前言:C初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C初阶系列会持续更新,上学期间将不定时更新,但总会更的 目录 一、什么是面向对象编程 二、什么是类和如…

Python 十五个炫酷代码

1 炫酷彩虹 视频是动态的,不信你运行试试。 from turtle import *colors ["red", "yellow", "blue", "lime"] bgcolor("black")x 6 t [Turtle(), Turtle()]for index, i in enumerate(t):i.speed(0)i.color(&…

【排序算法】希尔排序(C语言)

【排序算法】—— 希尔排序 目录 一、希尔排序原理1. 插入排序的问题2. 希尔排序的思路 二、希尔排序的相关问题1. 为什么插入排序那么多但效率却很高2. 如何选择希尔增量 三、代码实现1. 代码实现思路2. 实现代码 希尔排序是对直接插入排序的优化,在学习之前&…

C++ 之命名空间namespace【详解】

文章目录 一,命名空间出现的意义二,命名空间的定义命名空间里面可以包含变量,函数,类型:命名空间不可以定义在局部作用域:命名空间可以嵌套: 三,同一个工程中允许存在多个相同名称的…

Axios 通过a标签下载文件 跨域下载

<!-- a标签占位 --><a ref"down" ></a>getTest() {this.$axios.request({url: https://cnv13.55.la/download?file_key3695fa9461a0ae59cf3148581e4fe339&handle_typeexcel2pdf,method: get,responseType: blob, // 切记类型 blob}).then(re…

语音识别技术在医疗行业中的应用案例

随着语音识别技术和计算机视觉技术的不断提高&#xff0c;现代医学正在进入全面数字化时代。 追求高质量的训练数据是人工智能产业的信条&#xff0c;得到更为精准的语音机器模型更离不开语音数据的不断供给。本文讲介绍: 什么是语音识别技术语音识别技术如何应用于医疗行业 …

shell 脚本的函数和数组

函数 —— 封装的一个公式&#xff1a;sin、cos、tan —— 函数为脚本的别名 —— 函数就是一个功能模块&#xff0c;在函数中写执行的命令即可&#xff1b;使用函数可以避免代码重复&#xff0c;增加可读性&#xff0c;简化脚本&#xff0c;使用函数可以将大的工程分割为若…