Redis(十二):Redis事务的基本操作
1、Redis事务概念
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
- Redis不保证原子性:Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。
- Redis事务没有隔离级别的概念:批量操作在发送 EXEC
命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。换句话说也就是所有命令在事务中,并没有直接执行,而是要在执行命令发起后才会开始执行。
Redis事务的三个阶段:
- 开启事务(Multi)
- 命令入队(…)
- 执行事务(Exec)
2、Redis事务基本操作命令
2.1、MULTI EXEC
127.0.0.1:6379> MULTI //开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> get ke2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Exec //执行事务
1) OK
2) OK
3) "y2"
4) OK
2.2、Discard
127.0.0.1:6379> MULTI //开启事务
OK
127.0.0.1:6379> set ke1 y1
QUEUED
127.0.0.1:6379> set ke2 y2
QUEUED
127.0.0.1:6379> set ke3 y3
QUEUED
127.0.0.1:6379> Discard //放弃事务,事务中的命令都不会执行
OK
127.0.0.1:6379> get ke1
(nil) // 因为放弃了事务查询不到ke1
3、Redis事务的异常
3.1、编译异常
命令有错,事务中的命令都不会执行。
127.0.0.1:6379> set kk1 y1
QUEUED
127.0.0.1:6379> set kk2 y2
QUEUED
127.0.0.1:6379> get kk3 y3 //这是一个错误命令
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> get kk4 y4
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> set kk3 y3
QUEUED
127.0.0.1:6379> set kk4 y4
QUEUED
127.0.0.1:6379> Exec //这里因为上面错误,进而整个事务列队都无法执行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get kk3 //因为事务执行错误,所以取不到kk3的值
(nil)
3.2、运行异常
事务队列中存在逻辑性语法错误,其他命令是可以执行的,所以说Redis没有原子性的说法。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> INCR k1 //“v1”怎么加一?所以是错的
QUEUED //并不是命令错误,运行前Redis无法识别
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range //报错了
3) OK //其他的正常执行
4) "v2"
4、总结
总的来说redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。值得注意的是它的非原子性和没有隔离级别的特性!!!
Redis(十二):Redis事务的基本操作相关推荐
- Redis(十二) - Redis消息队列
文章目录 一.Redis消息队列 1. 消息队列 2. 基于List结构模拟消息队列 3. 基于PubSub的消息队列 4. 基于Stream的消息队列 - 单消费模式 4. 基于Stream的消息队 ...
- 系统学习redis之二——redis集群搭建
redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 ...
- Android入门(十二)SQLite事务、升级数据库
原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...
- JavaWeb学习总结(十二)--事务
一.事务的介绍 1.1 什么是事务 银行转账!张三转10000块到李四的账户,这其实需要两条SQL语句: 给张三的账户减去10000元: 给李四的账户加上10000元. 如果在第一条SQL语句执行成功 ...
- MySQL学习【第十二篇事务中的锁与隔离级别】
一.事务中的锁 1.啥是锁? 顾名思义,锁就是锁定的意思 2.锁的作用是什么? 在事务ACID的过程中,'锁'和'隔离级别'一起来实现'I'隔离性的作用 3.锁的种类 共享锁:保证在多事务工作期间,数 ...
- springboot篇】二十二. springboot整合Redis集群
springboot整合Redis集群 **中国加油,武汉加油!** 案例准备 1. 新建Springboot项目springboot-redis-sentinel 2. 编写yml 3. Test ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- 深入剖析Redis系列(七) - Redis数据结构之列表
前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...
- 深入剖析Redis系列(五) - Redis数据结构之字符串
前言 字符串类型 是 Redis 最基础的数据结构.字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON.XML).数字(整数.浮点数),甚至是 二进制(图片.音频.视频),但 ...
- 二十四 Redis消息订阅事务持久化
Redis数据类型: Redis控制5种数据类型:String,list,hash,set,sorted-set 添加数据,删除数据,获取数据,查看有多少个元素,判断元素是否存在 key通用操作 JR ...
最新文章
- markword用于标记锁的位数
- android 上下偏差怎么写_详解 Android 热更新升级如何突破底层结构差异?
- matlab暂态信号,MATLAB6在电力暂态波形仿真实现中的应用
- 量数据导出Excel 之 多重影分身之术
- mysql sniffer 官网下载_MySQL抓包工具:MySQL Sniffer 和性能优化
- 互换性与测量技术基础总复习题(答案)
- 8box这件事欠考虑
- 传奇世界开服教程-地图编号与小地图编号查找方法
- svchost.exe 上传下载占用大量资源
- Emlog模板 简洁大气留白风格源码资源站
- Python pygame,精灵和精灵组
- Java“菜单“树递归-合并子树
- vue项目在vscode中编译eslint报错没显示红色波浪线提示
- 如何用Python+统计学,进行数据分析
- python学习第五节:用面向对象实现friendbook
- STM32驱动全彩LED灯模块WS2812
- 圣经不是一本书,而是一个图书馆,所以才这么难读
- 暗黑破坏神不朽传奇宝石共鸣方法攻略
- yapi连接mongodb集群
- DL645-2007通信协议进行三相/单相电表读取
热门文章
- decimal转为string sql_PHP+Mysql防止SQL注入的方法
- Qt中线程的简单使用
- unity底层运行机制_Unity跨平台的机制原理
- ajax中res和req,javascript – 来自AJAX调用的res.redirect
- lg手机历史机型_华为后,又一中国芯崛起!国际手机巨头LG都采用它的芯片了...
- java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?
- 脉冲宽度调制pdm_PWM (脉冲宽度调制)原理与实现
- python中数据类型不同运算不同_Python的基本数据类型与运算
- 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
- mysql字段是否存在_mysql判断列是否存在