| |
|
开发:
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之事务与乐观锁的实现 |
事务:要么同时成功,要么同时失败。事务的特性:
redis单条命令保证原子性,但不保证事务原子性。 Redis事务没有隔离级别的概念! 所有的命令在事务中,并没有直接执行,只有发起执行命令的时候才会执行! redis的事务流程:
事务中出错的两种情况
(error) EXECABORT Transaction discarded because of previous errors表示事务被取消
? 简单来说,如同过安检的人一样一个接着一个排队过安检,而安检只检查你看起来像不像一个坏人,如果从开始安检的所有人里面有一个看起来像坏人,那么刚才案件的所有人都不能进站。如果安检的时候没发现有坏人,但是进站之后坏人开始做坏事被发现了,可是和坏人一起进站的其他人已经进站了,没办法再让他们出去了,于是只能让坏人一个人出去。 redis不支持回滚redis官方文档给出了一下两点原因:
redis认为这是程序员应该避免的事情,而不应该由redis的开发者承担这份责任,况且大多数情况下回滚也无法挽回错误。正是因为不需要支持回滚,redis才能保持高效。 ie:不该我干的事情我一分钱也不会干,我只负责保持高效。 放弃事务: 执行此命令后,事务将被放弃,队列将被清空,且将会从事务状态中退出
实现乐观锁: ? ? 如果只有一个客户端对redis-server进行操作的情况下,那么无论我们做什么操作基本都能够保证操作的正确性,但如果有若个客户端一起对redis-server发起操作请求,那么就有可能会出现资源的争夺问题。 ? 举个简单的例子来说,假设key1对应的值为10,现在两个程序同时执行如下程序:
? 如果碰巧两个程序在同一时刻执行了get key1的命令,那么他们所读取到到的值都是10,然后分别对10+1的到11,然后又将11 set 给了key1 ,这样key1最终的值将会是11,而不是正确的12。 所以我们要做的就是派一个人来替我们监视key1的值有没有发生变化。
我们首先执行命令
用户还可以使用无参数的 watch何时被取消?
参考:redis官方文档 若有不足之处,还请指正 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 22:56:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |