多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令 特性1:在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中 特性2:在事务执行过程中任意命令执行失败,其余的命令仍会被执行 二:相关命令 multi : 标记一个事务块的开始( queued ) exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 )  discard : 取消事务,放弃事务块中的所有命令 unwatch : 取消watch对所有key的监控 watch:监视一或多个key(如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )) **正常执行** ![](https://img.kancloud.cn/dc/44/dc44669575d3a27c2a84b1e44356a1fe_581x323.png) **放弃事务** ![](https://img.kancloud.cn/86/d2/86d28f3cdda8a66a3626ca02d7ec2129_587x238.png) **若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行** ![](https://img.kancloud.cn/c9/a1/c9a1c80f2ef45d56262af791e919bbc8_589x386.png) **若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。** ![](https://img.kancloud.cn/c0/a5/c0a50bc38f27c2064e05de2845fbe79e_583x367.png) **使用watch** 使用watch检测balance,事务期间balance数据未变动,事务执行成功 使用watch检测balance,在开启事务后(标注1处),在新窗口执行标注2中的操作,更改balance的值,模拟其他客户端在事务执行期间更改watch监控的数据,然后再执行标注1后命令,执行EXEC后,事务未成功执行。 ![](https://img.kancloud.cn/d1/05/d105d61ec3d469f5030a241a2136b3af_585x243.png) 一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。 故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。 watch指令类似于乐观锁