【Redis】Redis事务
定义
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队。
Multi Exec discard
定义
Multi:输入Multi命令之后,输入的命令都会一次进入命令队列中,但是不会执行。(使用set语句)
Exec:命令队列中的命令 ,等待输入Exec之后就可以依次执行。
discard:在组队的过程中,可以输入discard命令来放弃组队。之前输入的命令也会一并消除。
具体场景
1、场景:正确组队,正确提交
结果:提交成功
2、场景:组队过程中出现错误,提交执行的时候报错。
结果:之前的队列会全部消除
3、场景:组队成功,提交成功,但是有部分失败
结果:只有报错的命令不会被执行,其他的命令会正常执行,不会回滚。
解决事务冲突:悲观锁、乐观锁
悲观锁:悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
乐观锁:乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。
乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。
事务的三个特性
单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行
不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
文章来源: blog.csdn.net,作者:张艳伟_Laura,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Laura__zhang/article/details/122403587
- 点赞
- 收藏
- 关注作者
评论(0)