一.Redis事务的概念:

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

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

二.Redis事务没有隔离级别的概念:

  所有的命令在事务中,并没有直接被执行!批量操作在发送 EXEC 命令前被放入队列缓存,只有发起执行命令的时候才会执行!

三.Redis不保证原子性:

  Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

四.Redis事务的三个阶段:

  • 开始事务
  • 命令入队
  • 执行事务

五.Redis事务相关命令:

  watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )

  multi : 标记一个事务块的开始( queued )

  exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 ) 

  discard : 取消事务,放弃事务块中的所有命令

  unwatch : 取消watch对所有key的监控

六.Redis事务使用案例:

(1)正常执行

(2)放弃事务

(3)若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行

(4)若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。

(5)使用watch

案例一:使用watch检测balance,事务期间balance数据未变动,事务执行成功

127.0.0.1:6379>set balance  100

127.0.0.1:6379>set debt 0

案例二:使用watch检测balance,在开启事务后(标注1处),在新窗口执行标注2中的操作,更改balance的值,模拟其他客户端在事务执行期间更改watch监控的数据,然后再执行标注1后命令,执行EXEC后,事务未成功执行。

一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。

故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。

 总结:

  watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。

十七、Redis事务相关推荐

  1. redis学习之——Redis事务(transactions)

    Redis事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的,所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 常用命令:MULTI  开启事务  EXEC 提交事务 ...

  2. 腾讯二面:Redis 事务支持 ACID 么?

    ❝ 腾讯面试官:「数据库事务机制了解么?」 「内心独白:小意思,不就 ACID 嘛,转眼一想,我面试的可是技术专家,不会这么简单的问题吧」 程许远:「balabala-- 极其自信且从容淡定的说了一通 ...

  3. 图解Redis事务机制

    来自:Java中文社群 作为关系型数据库中一项非常重要的基础功能--事务,在 Redis 中是如何处理并使用的? 1.前言 事务指的是提供一种将多个命令打包,一次性按顺序地执行的机制,并且保证服务器只 ...

  4. 【带你重拾Redis】Redis事务

    Redis事务 Redis的事务主要依赖于WATCH ,UNWATCH,MULTI , EXEC, DISCARD等命令. 其中 MULTI , EXEC , DISCARD 分别对应关系型数据库的 ...

  5. redis中有key但是删不掉_一篇图文,搞定Redis事务

    在面试的时候,通常会被问到redis是如何实现分布式锁的.如果我们只知道是借助于setnx/setex ,而不了解setnx/setex底层如何实现,那基本上是无法过关的,尤其是大厂.那究竟redis ...

  6. Redis事务和watch

    redis的事务 严格意义来讲,redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的. redis中的事务定义 Redis中的事务(transaction)是一组命令的集合. 事务同 ...

  7. Redis - 事务

    一.概述 和传统关系型数据库一样,Redis 同样是支持事务的.Redis 的事务可以通过 MULTI/EXEC/DISCARD/WATCH 等命令来实现. 二.事务的 ACID 特性 1). 原子性 ...

  8. python redis事务_python redis事务源码及应用分析

    在多个客户端同时处理相同的数据时,不谨慎的操作很容易导致数据出错.一般的关系型数据库中有事务保证了数据操作的原子性,同样Redis中也设置了事务,可以理解为"将多个命令打包,然后一次性.按顺 ...

  9. Redis事务(transaction)

    Redis事务(transaction) 本文档翻译自: http://redis.io/topics/transactions . MULTI . EXEC . DISCARD 和 WATCH 是 ...

最新文章

  1. 7、Spring -Cloud-路由网管Spring Cloud Zuul
  2. 01_Difference between case object and object
  3. 自定义控件:旋转菜单
  4. numpy.zeros详解
  5. Oracle业务适合用PostgreSQL去O的一些评判标准
  6. 理解分布式一致性:拜占庭容错与PBFT
  7. SQL Server Query界面不能录入中文
  8. SAP ABAP刷新ALV 渲染刷新 (我也不太懂,反正就这么写了)
  9. inventor如何钣金出弧面_Inventor教程之钣金多规则
  10. matlab lj( )函数,matlab 函数调用问题
  11. SVD decomposition and polar decomposition
  12. 说不尽的 π —— π 的近似计算
  13. Python装饰器之一
  14. OpenResty-ngx.var变量
  15. PHP中header和session_start前不能有输出的原因
  16. bzoj 4516: [Sdoi2016]生成魔咒
  17. iOS 各种证书/签名详解
  18. java encapsulation_Java Encapsulation vs Abstraction
  19. PyCharm选择性忽略PEP8代码风格警告信息
  20. 24点问题(增加数据)·回溯

热门文章

  1. java default locale_Java JSON.defaultLocale方法代码示例
  2. 怎么修照片多余的部分_PS教程旧照片翻新修复技巧
  3. python set没有顺序_Python一题多解学思路:指定列前置
  4. 测评结果_刚刚,2018全国文明城市测评结果重磅公布!你的家乡排第几?
  5. 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
  6. 新计算机教师工作随笔反思,信息技术反思随笔 (2)
  7. 皮一皮:这个老爸有觉悟...
  8. 微信突然更新,新增了这些功能...
  9. 某生鲜电商平台的监控模块设计
  10. Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞