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数据未变动,事务执行成功

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

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

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

 总结:

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

  

转载于:https://www.cnblogs.com/DeepInThought/p/10720132.html

Redis之Redis事务相关推荐

  1. Redis初学:14(Redis中的事务)

    Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...

  2. redis中的事务、lua脚本和管道的使用场景

    https://blog.csdn.net/fangjian1204/article/details/50585080 事务 redis中的事务并不像mysql中那么完美,只是简单的保证了原子性.re ...

  3. Redis事务,ACID性质,但是Redis不支持事务回滚

    ACID性质 1.原子性 事物具有原子性指的是,数据库将事务中的多个操作当做一个整体来执行,服务器要么执行事务中的所有操作,要么就一个操作也不执行. 对于Redis的事务功能来说,事务队列中的命令要么 ...

  4. 跟我一起学Redis之Redis事务简单了解一下

    前言 关系数据库中的事务,小伙伴们应该是不陌生了,不管是在开发还是在面试过程中,总有两个问题逃不掉: •说说事务的特性:•事务隔离级别是怎么一回事? 事务处理不好,数据就可能不准确,最终就会导致业务出 ...

  5. redis笔记——redis事务及锁应用

    1.redis支持简单的事务 2.redis 和 mysql事务的对比 Mysql Redis 开启 start transaction multi(并不执行,放在一个队列里) 语句 普通sql 普通 ...

  6. Redis持久化_Redis事务_Redis删除策略

    Redis持久化 Redis包含3中持久化方案: RDB, AOF, RDB与AOF混合使用 RDB RDB: 将内存中数据生成快照形式, 将其保存到.rdb文件中, 关注点是数据 使用命令执行RDB ...

  7. Redis之Redis的事务

    1.Redis的事务是什么 Redis 事务的本质是一组命令的集合,事务支持一次执行多个命令,一个事务中所有命令都会被序列化.(redis事务就是一次性.顺序性.排他性的执行一个队列中的一系列命令). ...

  8. Redis的基础事务

    Redis 存在事务,尽管它没有数据库那么强大,但是它还是很有用的,尤其是在那些需要高并发的网站当中. 使用 Redis 读/写数据要比数据库快得多,如果使用 Redis 事务在某种场合下去替代数据库 ...

  9. redis 安全 备份 事务

    目录 安全 备份 事务 安全 对于数据库来说,安全性是非常重要的,这时候就要提供身份验证,以便客户端想要建立连接时进行身份验证 语法 config set requirepass "123& ...

  10. php redis事务回滚,【Redis】Redis事务详解,Redis事务不支持回滚吗?

    1.redis事物参考:https://baijiahao.baidu.com/s?id=1613631210471699441&wfr=spider&for=pc (php操作red ...

最新文章

  1. json字符串的理解
  2. 手把手教你怎么在linux安装c++编译器
  3. 基于CNN的阅读理解式问答模型:DGCNN
  4. Python基础概念_7_数据结构
  5. Linux实时查看进程命令top笔记
  6. c++调用python找不到py文件的可能原因
  7. 《JSON笔记之二》----封装JSONUtil
  8. matplotlibpycharm
  9. mongoose和mongodb的几篇文章 (ObjectId,ref)
  10. 下一版本的Android OS ——Jelly Bean
  11. dBm与功率(w)换算关系!
  12. 免费好用的的在线代码IDE网站,支持python
  13. oracle locked time,Oracle里面的用户无法登录 LOCKED(TIMED)解决方法
  14. 如何解决搜狗浏览器自动填充
  15. css-3d旋转(三维立体效果)
  16. 计算机公式求时间差公式,excel时间差计算公式有哪些 excel怎么快速计算时间差...
  17. 高数 | 为什么f(x)从a到b的积分等于从b到a的积分的相反数?
  18. 屏幕显示密度dpi_屏幕dpi是什么意思?
  19. 【四】Spring源码分析之启动主流程---AbstractApplicationContext的refresh方法
  20. 细数云计算产品和技术-云计算安全

热门文章

  1. C#控制 计算机中“服务”的启动与停止 转
  2. vb代码转换为java_有人可以解释如何使用JACOB将VB代码转换为Java吗?
  3. Service worker 的概念和用法
  4. Oracle PL/SQL之NEXT_DAY - 取得下一个星期几所在的日期
  5. 学python的注意点_python学习入门细节知识点
  6. 用户提需求要把自己文集内的全部文章一键全部转换为私密。我该不该听他的?...
  7. esri-leaflet入门教程(3)-自定义底图
  8. 代码提示(支持3.X和4.X)—ArcGIS API forJavaScript
  9. 如何营造游戏的打击感
  10. StarlingMVC:为Starling量身打造的MVC框架