| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis—事务冲突和解决 -> 正文阅读 |
|
[大数据]Redis—事务冲突和解决 |
事务的冲突场景: 买车票时,票只有一张,但是买票的人有1000个人,冲突就是一千个人都会买到票,但是真实的情况是只能有一个人能支付成功买到车票。 结局方案: 1、悲观锁: 结合场景理解,当一个人买票的时候,其他人都不能进行买票操作。这种锁的机制在传统的关系型数据库中常有体现,比如:行锁、表锁、读锁、写锁等,都是在操作之前先上锁。 2、乐观锁: 结合场景理解,大家都可以抢票,都可以进入付钱,但是只有一个人能支付成功。当一个人支付成功了之后,其他人就无法支付了,这里有一个版本号控制机制,类似于车站的【票已售空】的牌子,开始有一张票的时候,单价都可以去买票,那个时候牌子上面写的是有余票,但是当第一个人已经买了票之后,那个版本号就会更改,也就是牌子上面写票已售空,这时候大家就会检查一下这个版本号,如果和原来的版本号不一样,那么就无法执行买票操作了。 乐观锁不会像悲观锁一样在操作之前加锁,但是在操作之前回去检查一下这个数据是否被更新。 乐观锁适用于多读的类型,这样可以提高吞吐量。 Redis就是利用这种check-and-set机制实现事务的。 乐观锁在Redis中的使用: 命令:watch key [key ...] 在启动事务之前,也就是执行multi之前,先执行watch key [key...] ,可以监视一个或者多个key,如果事务在执行(exec)只之前,这些key被其它命令所改动,那么事务将会被打断。 模拟一个场景:两个事务去操作一个整型的数字k1,都加10,两个事务启动之前,各自都需要使用watch命令将k1监视起来,然后两个事务都可以进入命令队列,但是执行(exec)时,只能时先执行的那个事务可以执行成功,后执行的就会报错。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:17:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |