Redis的事务和锁机制
这里是允谦的学习之路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ
👋博客主页🎉 允谦的学习小屋
⭐️更多文章👨🎓请关注允谦主页📝
🍅文章发布日期:2022.03.01
👋java学习之路!
欢迎各位🔎点赞👍评论收藏⭐️
🎄冲冲冲、持续更新🎄
文章目录
1、Redis的事务定义
Redis事务是一个单独的隔离操作:事务中所有的命令都会序列化、按顺序的执行。事务在执行过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队。
2、Multi、Exec、discard
从输入Multi命令开始,输入的命令都会和一次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令一次执行。
组队的过程中可以通过discard来放弃组队。
3、事务的错误处理

取消组队的情况

组队的过程中,有一个错误,上面的所有指令都不能执行

组队时成功,运行时出错,不影响别的指令执行

4、事务冲突的问题

4.1悲观锁
悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

4.2 乐观锁
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zy0JiP3w-1646111740905)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20220301103422823.png)]](https://i-blog.csdnimg.cn/blog_migrate/125cbbb82ebb3a84d6388377b1ff9908.png)
4.3 WATCH key[key …]
在执行multi之前,先执行watch key [key…] 可以监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。
5、Redis事务三特性:
- 单独的隔离操作:
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 - 没有隔离级别的概念:
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行 - 不保证原子性:
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
交前任何指令都不会被实际执行
- 不保证原子性:
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
80

被折叠的 条评论
为什么被折叠?



