Redis-第六章节-事务
目录
- 简介
- 执行过程
- 特点
- 案例
- watch
简介
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
执行过程
开始事务 -> 命令入队 -> 执行事务。
特点
① 批量操作在发送 exec
命令前被放入队列缓存。
② 收到exec
命令后进入事务执行,事务中任意命令执行失败,其余的命令依然会被执行。
③ 在事务的执行过程中,其他客户端提交的命令请求不会插入到事务执行命令的序列中。
案例:
(1)正常执行
localhost:6379> multi
OK
localhost:6379> set a 1111
QUEUED
localhost:6379> set b 2222
QUEUED
localhost:6379> set c 3333
QUEUED
localhost:6379> set d 4444
QUEUED
localhost:6379> exec
1) OK
2) OK
3) OK
4) OK
(2)取消事务
localhost:6379> multi
OK
localhost:6379> set e 55555
QUEUED
localhost:6379> set f 66666
QUEUED
localhost:6379> discard
OK
localhost:6379> exec
(error) ERR EXEC without MULTI
(3)编译型错误
最后执行exec
命令之后,会执行队列中的命令,队列中命令有失败的,所以最后整个命令都执行失败。
编译型异常代码有问题,命令有错,事务中所有的命令都不会被执行。(4)运行时错误
localhost:6379> set a qqqq
OK
localhost:6379> multi
OK
localhost:6379> incr a
QUEUED
localhost:6379> set b 1111
QUEUED
localhost:6379> set c 2222
QUEUED
localhost:6379> set d 3333
QUEUED
localhost:6379> exec
1) (error) ERR value is not an integer or out of range
2) OK
3) OK
4) OK
localhost:6379> keys *
1) "a"
2) "c"
3) "b"
4) "d"
如果事务队列存在语法错误,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常。
watch
Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
- 监控
a
时,a
被修改//客户端1
localhost:6379> set a 1111
OK
localhost:6379> WATCH a
OK
localhost:6379> MULTI
OK
localhost:6379> set a 2222
QUEUED
localhost:6379> exec
(nil) //客户端2
127.0.0.1:6379> set a 567
OK
- 正常
watch
localhost:6379> set a 1111
OK
localhost:6379> WATCH a
OK
localhost:6379> MULTI
OK
localhost:6379> set b 222
QUEUED
localhost:6379> set c 333
QUEUED
localhost:6379> set d 444
QUEUED
localhost:6379> exec
1) OK
2) OK
3) OK
localhost:6379> keys *
1) "a"
2) "c"
3) "b"
4) "d"
Redis-第六章节-事务的更多相关文章
- 【redis专题(9)】事务
Redis支持简单的事务,所谓简单是因为其不支持回滚(回滚是用队列模仿的),与mysql有以下区别 rollback与discard的区别: 如果已经成功执行了2条语句, 第3条语句出错 Rollba ...
- redis 有没有ACID事务
看redis官网的介绍: redis确实是有事务的,但是和传统的ACID是否相同呢? 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致 ...
- Redis(五)事务
Redis(五)事务 引用wiki中关于事务处理的定义: Transaction processing is information processing in computer science th ...
- Golang 实现 Redis(8): TCC分布式事务
本文是使用 golang 实现 redis 系列的第八篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题. godis 集群的源码在Github:Godi ...
- redis不完整的事务实现Transaction
使用场景 redis一个命令执行是单线程的,不用担心并发冲突,如果你想有几个命令想像一个命令一样,在这几个命令执行过程中不会执行别的客户端发来的命令 ,也就是原子性,就可以用 redis Transa ...
- 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务
摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...
- Redis(六):Redis的事务
Redis的事务目录导航: 是什么 能干嘛 怎么玩 3阶段 3特性 是什么 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 ...
- Redis系列六 Redis事务
Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中, ...
- Redis系列二之事务及消息通知
一.事务 Redis中的事务是一组命令的集合.一个事务中的命令要么都执行,要么都不执行. 1.事务简介 事务的原理是先将一个事务的命令发送给Redis,然后再让Redis依次执行这些命令.下面看一个示 ...
随机推荐
- mysql数据库连接java
1 1.创建配置文件jdbc.properties 2 3 jdbc.driver=com.mysql.jdbc.Driver 4 jdbc.url=jdbc:mysql://localhost:33 ...
- Win10下mysql5.5和mysql8.0.19共存
Win10下mysql5.5和mysql8.0.19共存 需求:由于之前做的项目用的是mysql5.5,而新接的项目指定用mysql8,需要myql5..5和8同时存在运行. 前提:电脑已经安装mys ...
- C/C++ 弱符号
为什么会出现弱符号 在两个目标文件(a.o与b.o)链接的过程中,如果其中一个目标文件(a.o)通过extern的方式引用了另外一个目标文件(b.o)中的符号flag,但很不幸,在连接的过程中b.o没 ...
- android基本组件 Button
android中提供了普通按钮Buttton和图片按钮ImageButton两种按钮组件,ImageButton按钮中主要有一个android:src属性,用于设置按钮的背景图片.可以在Button的 ...
- Logstash学习之路(一)Logstash的安装
一.Logstash简介 Logstash 是一个实时数据收集引擎,可收集各类型数据并对其进行分析,过滤和归纳.按照自己条件分析过滤出符合数据导入到可视化界面.它可以实现多样化的数据源数据全量或增量传 ...
- C# 设置默认关联程序
以下代码做个Mark /// <summary> /// Create an associaten for a file extension in the windows registry ...
- epoll的陷阱
Starvation 特别提出在ET模式下,因为需要一次性把数据读完,如果一次性通知的数据过大,有可能处理时间过长,导致同一线程其他的事件长时间等待.这个不仅仅是ET模式下,也不仅仅是epoll模型下 ...
- Java 安全之Weblogic 2017-3248分析
Java 安全之Weblogic 2017-3248分析 0x00 前言 在开头先来谈谈前面的绕过方式,前面的绕过方式分别使用了streamMessageImpl 和MarshalledObject对 ...
- Shiro配置Session检测时Quartz版本冲突
项目背景: shiro 1.3 + quartz 2.x 2018-9-11 22:20:35补充: 经过测试,本人发现 ,通过实现 org.apache.shiro.session.mgt.Exec ...
- Linux 入门教程:基础操作 01
1.1 实验内容 实验楼环境介绍 常用 Shell 命令及快捷键 Linux 使用小技巧 1.2 实验知识点 Linux 基本命令 通配符的使用 查看帮助文档 终端的概念 通常我们在使用 Linux ...