Redis事务和锁机制
1.Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按照顺序执行.事务在执行的过程中,不会被其它客户端发送的命令请求打断.
2.Redis事务的主要作用就是串联多个命令防止别的命令插队
1、事务—基本操作命令
multi: 输入的命令会依次进入命令队列中,进行组队,但不会执行 exec: Redis会将之前的(存在Multi)命令队列中的命令依次执行 discard: 组队的过程中未执行Exec命令之前可通过discard来放弃组队
组队与执行案例:
添加两条String类型数据 multi:代表进行组队 QUEUED:表示成功放入队列中 exec:执行命令(返回OK代表执行成功)
组队后并取消案例:
添加两条String类型数据 multi:代表进行组队 QUEUED:表示成功放入队列中 discard:放弃组队(返回OK代表执行成功,放弃队列中的命令)
1.1、事务—事务的错误处理
1.组队中某个命令出现了报告错误,执行整个的所有队列时都会被取消
2.如果是执行阶段中某个命令出现错误,则只有报错的命令不会被执行,其它命令不会被影响(正常执行),不会回滚
组队阶段报错案例
添加第三条命令进行组队时报错 执行exec队列时也失败队列中所有的命令都不会执行
执行阶段报错案例
在组队过程中第三条命令给a1增1时没有报错 执行队列中所有命令时,提示第三条报错前两条OK 只有第三条没有执行成功,其它正在执行没有影响
2、事务三特性
2.1:单独的隔离操作:
事务中的所有命令都会序列化、按顺序执行.事务在执行的过程中,
不会被其它客户端发送过来的命令请求打断
2.2:没有隔离级别的概念:
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任
何指令都不会被实际执行
2.3:不保证原子性:
事务中如果有一条命令执行失败,其后的命令仍然会执行,没有回滚
3、WATCH key
简介:
在执行multi之前,先执行watch key1 key2… 可监视一个或多个key,
如果在事务执行之前,这个(或这些多个key)被其它命令所改动,
那么事务将被打断
图下为案例
1.创建一条key为n2,value为100的数据 2.两条回话框都是要watch来进行监视n2 3.两条回话框都进行multi队列操作 4.两条对话框都给n2的value修改值 5.当图1先执行命令exec,显示成功值修改为200 6.当图2再进行执行时返回nil执行失败 (原理:如初始时n2版本为1.1,当图1执行exec命令完成后n2版本会修改为1.2 当图2再去执行exec命令时会进行与版本匹配,会发现匹配不成功)



