| |
|
开发:
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事务 |
1.事务简介mysql中事务四大特性,原子性,隔离性,持久性,一致性。 可以一次执行多个命令,本质是一组命令的集合。一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞单独的隔离的操作。 MULTI、EXEC、DISCARD、WATCH。这四个指令构成了 redis 事务处理的基础。 2.Redis事务处理流程
?
案例: ? 有关事务,经常会遇到的是两类错误: 1.调用 EXEC 之前的错误 “调用 EXEC 之前的错误”,有可能是由于语法有误导致的,也可能时由于内存不足导致的。只要出现某个命令无法成功写入缓冲队列的情况,redis 都会进行记录,在客户端调用 EXEC 时,redis 会拒绝执行这一事务。 ? 2.调用 EXEC 之后的错误? 而对于“调用 EXEC 之后的错误”,redis 则采取了完全不同的策略,即 redis 不会理睬这些错误,而是继续向下执行事务中的其他命令。这是因为,对于应用层面的错误,并不是 redis 自身需要考虑和处理的问题,所以一个事务中如果某一条命令执行失败,并不会影响接下来的其他命令的执行。 ? ? ?3.Redis事务冲突双十一去购物的时候使用同一张银行卡去付款 一个请求想给金额减8000 一个请求想给金额减5000 一个请求想给金额减1000 ? 解决方案:
? ?
version 1 查余额 10000 version:1 10000>8000 -8000 update uuuu set money-=8000 where version=1 1.1 10000 -5000 UPDATE uuuuu SET money-=5000 WHERE VERSION=1 2000 2000>1000 UPDATE uuuu SET money-=1000 WHERE VERSION=1.1 1.2 ? 乐观锁(Optimistic Lock), 顾名思义,就是很乐观, 每次去拿数据的时候都认为别人不会修改,所以不会上锁, 但是在更新的时候会判断一下在此期间别人有没有去更新这个数据, 可以使用版本号等机制。乐观锁适用于多读的应用类型, 这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。 ?4.Watch“WATCH”可以帮我们实现类似于“乐观锁”的效果,即 CAS(check and set)。 WATCH 本身的作用是“监视 key 是否被改动过”,而且支持同时监视多个 key,只要还没真正触发事务,WATCH 都会尽职尽责的监视,一旦发现某个 key 被修改了,在执行 EXEC 时就会返回 nil,表示事务无法触发。
? ?总结:redis事务的特点 1.单独的隔离操作 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 2.没有隔离级别的概念 队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行 3.不保证原子性 事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 14:58:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |