| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 七天玩转Redis | Day4、Redis事务操作 -> 正文阅读 |
|
[大数据]七天玩转Redis | Day4、Redis事务操作 |
号外号外🎉🎉🎉:小猿和CSDN联合推出的“七天玩转Redis,打卡还能领周边”活动开始啦!点击查看👉🏻【报名及活动细则】👈🏻,轻轻松松和小伙伴们一起拿奖励吧! PS:零基础也能入门Redis哟,快去一起参与拿周边吧!
课前答疑:很多小伙伴问我零基础或者根本没有使用过Redis,可以学习嘛?当然是可以的!充分考虑到小伙伴们的学习程度有所不同,所以本次课程的所有操作都是在Windows环境下进行的,不会依赖太多的环境配置,且上手容易。已经学习过Redis的小伙伴们同样可以再学习一遍,温故而知新,还能拿CSDN定制周边!何乐而不为呢😀? 今日学习内容今天这一篇文章主要来和大家分享一下在Redis中的事务操作以及如何通过Redis来实现乐观锁操作。 首先什么是事务?事务一般都是用于表示对数据库的一系列操作的集合,简单来说就是把多条语句放在一起执行就叫事务。它的特点是要么全执行,要么全不执行。在MySQL中事务有四大特性,分别是:原子性、一致性、隔离性、持久性,简称是ACID特性, 但是在Redis中的事务和MySQL中的事务稍有不同,在Redis中的事务本质上其实是一组命令操作的集合,在事务执行的过程中,这些命令会被序列化,按照顺序依次执行。所以Redis中的事务具有的特点是:一次性、顺序性、排他性。
Redis中的事务是没有隔离性的,因此也更不具备隔离级别这一说法,并且Redis的事务并不是直接执行的,而是需要经过命令提交时候才能执行,Redis事务的执行流程图如下: 同时Redis的单条命令具有原子性(也就是要么成功,要么失败),但是对于存在多条命令的Redis事务来说,不具备原子性,也就是说如果事务中有其他命令执行失败了,其他命令还会执行下去。 (1)正常执行事务我们先来模拟一个事务正常执行的过程, 第一步,开启事务 在事务执行之前,我们需要先使用MULTI命令来开启事务,
第二步,命令入队 开启事务时候就需要向该事务中加入命令,将命令入队,这一步你可以任意写入你想要执行的命令。注意:在将命令添加到队列之后,命令并不会立即执行,而是返回一个QUEUED,表示入队成功! 第三步,提交命令 在我们将所有的命令都入队之后,就可以提交执行这个事务了,提交事务的命令是:
事务提交之后就会按照我们入队的命令的顺序来执行命令,在命令执行完毕之后就会将这个事务自动关闭。并且返回事务中所有命令的执行结果!
(2)取消事务执行如果在我们的事务没有提交之前,你想要取消执行这个事务,那么可以使用DISCARD命令,这样这个事务就会被自动取消,其中入队的命令也不会被执行,在下一次执行事务时还需要重新再开启事务!
如我们取消正在向队列中加入命令的事务:
(3)事务编译时异常在事务执行或者命令入队的时候也是会发生错误的,和在Java代码中一样,如果我们的命令在书写上就存在明显代码错误,那么就会发生编译时异常,这个时候会有错误提示,但是事务仍能提交,但是提交之后,整个事务队列中的命令都不会执行, 比如下面的例子,我们随便写入一个不存在的命令并提交执行,执行完之后去查看我们的数据是否添加成功!
(4)运行时异常运行时异常与编译时异常不同,运行时一样在编写代码时不会提示,一般情况下是我们的代码编写正确,但是存在逻辑问题,比如1/0这样的。 在Redis中如果事务中的命令存在运行时异常,那么在提交事务之后,不存在异常的命令同样会被执行,异常的命令会单独执行失败! 如下,我们在事务中输入一个运行时会发生错误的命令INCR k9,给k9加一,但是k9并不存在,所以在提交事务之后该命令会执行失败,但是其他没有异常的命令可以执行成功!
(5)Redis乐观锁实现Redis中其实也是有锁的机制的,而且锁可以分为乐观锁和悲观锁,
所以如果想要实现乐观锁,我们需要使用一个命令去监控我们要操作的字段,在Redis中这个命令是:
如果想要实现锁,那么一定是要伴随着事务进行的。 我们以超市消费作为一个例子来实现Redis的乐观锁和监控,先定义一个money字段表示我们的钱,定义一个outMoney字段表示花出去的钱,我们现在要开启一个事务执行下面这样一个任务:“money'花出去10元,则outMoney增加10元”,在开启事务之前先使用WATCH命令去监控money字段。
上面是一个正确的操作,没有问题, 但是如果我们现在重复刚才的操作(正常情况下money应该变成80),但是并不急着提交事务,而且开启一个新的Redis客户端,在其中对我们的money加10,之后再提交上一个上一个事务,就会提示我们的money已经被修改,这个时候事务一定是执行失败的! 1、首先去监控money,并开始一个事务,将命令入队,但是不去提交,
2、打开一个新的Redis客户端,修改money的值
3、返回第一个Redis客户端,提交修改,并查询money的值,显示money值为100
今日总结今天主要和大家讲解了在Redis中的事务操作,它是保护数据安全的一大举措,而且在开发中Redis的事务使用也是非常广泛的,所以Redis的事务和乐观锁的实现,小伙伴们一定要记住哈,而且这也是面试的高频! 最后别忘记今天的打卡哟!【点击查看今天打卡贴】 在学习中存在任何问题的,大家都可以添加我的微信huixiaoyuan1030,(因为微信群二维码有效期只有七天😝),加入我们的“打卡答疑交流群”一起抱团、一起进步! 点击下方卡片可以找到我的微信二维码👇🏻👇🏻👇🏻 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 14:28:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |