1、Redis事务概念

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

  • Redis不保证原子性:Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。
  • Redis事务没有隔离级别的概念:批量操作在发送 EXEC
    命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。换句话说也就是所有命令在事务中,并没有直接执行,而是要在执行命令发起后才会开始执行。

Redis事务的三个阶段:

  1. 开启事务(Multi)
  2. 命令入队(…)
  3. 执行事务(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事务的基本操作相关推荐

  1. Redis(十二) - Redis消息队列

    文章目录 一.Redis消息队列 1. 消息队列 2. 基于List结构模拟消息队列 3. 基于PubSub的消息队列 4. 基于Stream的消息队列 - 单消费模式 4. 基于Stream的消息队 ...

  2. 系统学习redis之二——redis集群搭建

    redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 ...

  3. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

  4. JavaWeb学习总结(十二)--事务

    一.事务的介绍 1.1 什么是事务 银行转账!张三转10000块到李四的账户,这其实需要两条SQL语句: 给张三的账户减去10000元: 给李四的账户加上10000元. 如果在第一条SQL语句执行成功 ...

  5. MySQL学习【第十二篇事务中的锁与隔离级别】

    一.事务中的锁 1.啥是锁? 顾名思义,锁就是锁定的意思 2.锁的作用是什么? 在事务ACID的过程中,'锁'和'隔离级别'一起来实现'I'隔离性的作用 3.锁的种类 共享锁:保证在多事务工作期间,数 ...

  6. springboot篇】二十二. springboot整合Redis集群

    springboot整合Redis集群 **中国加油,武汉加油!** 案例准备 1. 新建Springboot项目springboot-redis-sentinel 2. 编写yml 3. Test ...

  7. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  8. 深入剖析Redis系列(七) - Redis数据结构之列表

    前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...

  9. 深入剖析Redis系列(五) - Redis数据结构之字符串

    前言 字符串类型 是 Redis 最基础的数据结构.字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON.XML).数字(整数.浮点数),甚至是 二进制(图片.音频.视频),但 ...

  10. 二十四 Redis消息订阅事务持久化

    Redis数据类型: Redis控制5种数据类型:String,list,hash,set,sorted-set 添加数据,删除数据,获取数据,查看有多少个元素,判断元素是否存在 key通用操作 JR ...

最新文章

  1. markword用于标记锁的位数
  2. android 上下偏差怎么写_详解 Android 热更新升级如何突破底层结构差异?
  3. matlab暂态信号,MATLAB6在电力暂态波形仿真实现中的应用
  4. 量数据导出Excel 之 多重影分身之术
  5. mysql sniffer 官网下载_MySQL抓包工具:MySQL Sniffer 和性能优化
  6. 互换性与测量技术基础总复习题(答案)
  7. 8box这件事欠考虑
  8. 传奇世界开服教程-地图编号与小地图编号查找方法
  9. svchost.exe 上传下载占用大量资源
  10. Emlog模板 简洁大气留白风格源码资源站
  11. Python pygame,精灵和精灵组
  12. Java“菜单“树递归-合并子树
  13. vue项目在vscode中编译eslint报错没显示红色波浪线提示
  14. 如何用Python+统计学,进行数据分析
  15. python学习第五节:用面向对象实现friendbook
  16. STM32驱动全彩LED灯模块WS2812
  17. 圣经不是一本书,而是一个图书馆,所以才这么难读
  18. 暗黑破坏神不朽传奇宝石共鸣方法攻略
  19. yapi连接mongodb集群
  20. DL645-2007通信协议进行三相/单相电表读取

热门文章

  1. decimal转为string sql_PHP+Mysql防止SQL注入的方法
  2. Qt中线程的简单使用
  3. unity底层运行机制_Unity跨平台的机制原理
  4. ajax中res和req,javascript – 来自AJAX调用的res.redirect
  5. lg手机历史机型_华为后,又一中国芯崛起!国际手机巨头LG都采用它的芯片了...
  6. java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?
  7. 脉冲宽度调制pdm_PWM (脉冲宽度调制)原理与实现
  8. python中数据类型不同运算不同_Python的基本数据类型与运算
  9. 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
  10. mysql字段是否存在_mysql判断列是否存在