151
社区成员
发帖
与我相关
我的任务
分享内容来源:https://huixiaoyuan.blog.csdn.net/article/details/122523003
事务:把多条语句放在一起执行
在MySQL中事务有四大特性,分别是:原子性、一致性、隔离性、持久性,简称是ACID特性,
Redis中的事务具有的特点是:一次性、顺序性、排他性。
事务的执行流程:开始事务(MULTI) -> 命令入队 -> 提交事务(EXEC) -> 执行结束(事务自动销毁)
Redis的单条命令具有原子性(也就是要么成功,要么失败)多条命令的Redis事务来说,不具备原子性
1.开启事务
开启事务命令
-- MULTI
2.命令入队
(ps:在将命令添加到队列之后,命令并不会立即执行,而是返回一个QUEUED,表示入队成功!)
3.提交命令
提交事务
-- EXEC
取消事务执行
取消事务
-- DISCARD
事务编译时异常
如果我们的命令在书写上就存在明显代码错误,那么就会发生编译时异常,这个时候会有错误提示,但是事务仍能提交,但是提交之后,整个事务队列中的命令都不会执行
运行时异常
在Redis中如果事务中的命令存在运行时异常,那么在提交事务之后,不存在异常的命令同样会被执行,异常的命令会单独执行失败!
Redis乐观锁实现
去监控我们要操作的字段的命令
-- WATCH key key要监控的字段的索引
在给字段添加监控的情况下通过事务去操作字段,如果在未提交时,有新的命令修改了字段值,那么事务一定会提交失败,但是在未监控的情况下,事务仍能提交成功!这就是Redis的乐观锁实现!
所以在实现乐观锁时,开启事务之前,一定要先给字段增加监控!
所以:Redis是可以实现乐观锁的!(面试的时候可是经常会问的!)
另外注意:Redis在每次事务提交之后,无论事务执行成功与否,该事务都会关闭,监控也会自动取消,在下次执行事务时都需要重新开启!
————————————————
版权声明:本文为CSDN博主「灰小猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44985880/article/details/122523003