IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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事务操作

Redis 事务

什么是事务?

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、有顺序地执行。事务在执行的过程中,不会被其他客户端发来地命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

在MySql中事务有四大特性,分别是:原子性、一致性、隔离性、持久性。简称ACID特性。
在Redis中的事务本质上是一组命令操作的集合,在事务执行的过程中,这些命令会被序列化,按照顺序依次执行。Redis事务特点:一次性、顺序性、排他性

  • 一次性:指的是Redis中的事务只执行一次,在该事务执行结束之后,这条事务的生命周期就结束了,再次执行事务时需要重新开启事务。
  • 顺序性:指Redis的事务中的所有命令,都是按照先后顺序依次执行的。
  • 排他性:指事务在对某一个数据进行操作的同时,其他事务或其他命令不能对这个数据进行操作。

Redis事务没有隔离性,而且也不是直接执行的。Redis事务执行流程图:
在这里插入图片描述
同时Redis的单条命令具有原子性(也就是要么成功,要么失败),但是对于存在多条命令的Redis事务来说,不具备原子性,也就是说如果事务中有其他命令执行失败了,其他命令还会执行下去。

1)正常执行事务

一个事务正常执行过程:

  1. 开启事务命令:MULTI

  2. 中间输入任意想要执行的命令,将命令入队。返回QUEUED表示入队成功。

  3. 提交事务命令:EXEC
    在这里插入图片描述

2)取消事务执行

如果我们在编写事务时想要取消这个事务,我们可以在事务提交之前使用DISCARD命令,将事务取消。其中入队的命令也不会被执行,在下一次执行事务是还需要重新再开启事务

在这里插入图片描述

3)事务编译时异常

当我们在事务执行或命令入队时出现编写错误,比如格式错误,语法错误等等,此时会发生编译异常,会有错误提示。虽然事务依然能够提交,但是整个事务队列的命令都不会执行。

在这里插入图片描述

4)运行时异常

运行时异常一般不会是因输入错误命令而报错,例如除0等逻辑问题。

注意了!!运行时异常的处理与编译异常不同!在Redis事务中命令存在运行时异常,在提交事务之后,存在错误命令的单条指令执行失败,其他正确命令正常执行!

5)Redis乐观锁

Redis中存在锁机制,分为乐观锁和悲观锁。

  • 悲观锁:认为什么时候都可能出错,所以在任何时候都会加锁
  • 乐观锁:认为什么时候都不会出错,所以什么时候都不会加锁,在更新数据的时候只需要去判断,在此期间是否有人修改过这个数据即可!

实现乐观锁命令:WATCH key [key...]

  • key要监控的字段的索引

我们举一个例子实现一下:
假如将1000块存进银行,然后从银行中消费100元。
我们可以定义一个key为’money’表示银行中我的账户余额,再定义一个’outmoney’字段表示我们消费的数额。我们要开启一个事务并且执行下面这样的一个任务:“money’中减100元,则’outmoney’增加100元,在开启事务之前先使用WATCH命令去监控money字段。

在这里插入图片描述

如图的确实现了’money’中减100元,'outmoney’增加100元,没有其他的问题。但是如果我们再次重复刚才的操作,结果应该是800 200。这次我们先将命令入队不提交(不进行EXEC命令),再打开第二个新的Redis客户端,修改’money’的值,然后再提交(第一个输入EXEC命令)事务,此时会执行失败。

在给字段添加监控的情况下通过事务去操作字段,如果在未提交时,有新的命令修改了字段值,那么事务一定会提交失败,但是在未监控的情况下,事务仍能提交成功!这就是Redis的乐观锁实现!
所以在实现乐观锁时,开启事务之前,一定要先给字段增加监控!
另外注意:Redis在每次事务提交之后,无论事务执行成功与否,该事务都会关闭,监控也会自动取消,在下次执行事务时都需要重新开启!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:39:53  更:2022-01-25 10:41:09 
 
开发: 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 15:02:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码