当前位置: 首页 > news >正文

Redis - 事务隔离机制

Redis 的事务的本质是 一组命令的批处理 。这组命令在执行过程中会被顺序地、一次性
全部执行完毕,只要没有出现语法错误,这组命令在执行期间是不会被中断。

当事务中的命令出现语法错误时,整个事务在 exec 执行时会被取消。

如果事务中的命令没有语法错误,但在执行过程中出现异常,该异常不会影响其它命令
的执行。(比如incrby一个字符)
Redis 的事务仅保证了数据的一致性,不具有像 DBMS 一样的 ACID 特性。
这组命令中的某些命令的执行失败不会影响其它命令的执行,不会引发回滚。即不具备
原子性。
这组命令通过乐观锁机制实现了简单的隔离性。没有复杂的隔离级别。
这组命令的执行结果是被写入到内存的,是否持久取决于 Redis 的持久化策略,与事务
无关。
Redis 事务通过三个命令进行控制。
muti :开启事务
exec :执行事务
discard :取消事务

在并发场景下可能会出现多个客户端对同一个数据进行修改的情况。

例如:有两个客户端 C 左与 C 右, C 左需要申请 40 个资源, C 右需要申请 30 个资源。
它们首先查看了当前拥有的资源数量,即 resources 的值。它们查看到的都是 50 ,都感觉资
源数量可以满足自己的需求,于是修改资源数量,以占有资源。但结果却是资源出现了“超
卖”情况。
为了解决这种情况, Redis 事务通过乐观锁机制实现了多线程下的执行隔离。
Redis 通过 watch 命令再配合事务实现了多线程下的执行隔离。

 

 

其内部的执行过程如下: 1) 当某一客户端对 key 执行了 watch 后,系统就会为该 key 添加一个 version 乐观锁,并
初始化 version 。例如初值为 1.0
2) 此后客户端 C 左将对该 key 的修改语句写入到了事务命令队列中,虽未执行,但其将该
key value 值与 version 进行了读取并保存到了当前客户端缓存。此时读取并保存的是
version 的初值 1.0
3) 此后客户端 C 右对该 key 的值进行了修改,这个修改不仅修改了 key value 本身,同
时也增加了 version 的值,例如使其 version 变为了 2.0 ,并将该 version 记录到了该 key
信息中。
4) 此后客户端 C 左执行 exec ,开始执行事务中的命令。不过,其在执行到对该 key 进行修
改的命令时,该命令首先对当前客户端缓存中保存的 version 值与当前 key 信息中的
version 值。如果缓存 version 小于 key version ,则说明客户端缓存的 key value
经过时,该写操作如果执行可能会破坏数据的一致性。所以该写操作不执行。
http://www.lryc.cn/news/258814.html

相关文章:

  • android项目实战之编辑器图片上传预览
  • 微信小程序:上传图片到别的域名文件下
  • Linux----内核及发行版
  • 设备制造行业CRM:提升客户满意度,驱动业务增长
  • JavaScript实现复制功能函数
  • JVM垃圾收集器
  • LeetCode(58)随机链表的复制【链表】【中等】
  • JVM源码剖析之registerNatives方法
  • HarmonyOS鸿蒙应用开发——数据持久化Preferences
  • C++STL库的 deque、stack、queue、list、set/multiset、map/multimap
  • Vuex快速上手
  • 计网 - LVS 是如何直接基于 IP 层进行负载平衡调度
  • GEE机器学习——利用支持向量机SVM进行土地分类和精度评定
  • 【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 断点 Break 命令篇】
  • 【JVM入门到实战】(三) 查看字节码文件的工具
  • 9:00面试,9:05就出来了,问的问题有点变态。。。
  • 无需重启,修改Linux服务器时区
  • 【Android嵌入式开发及实训课程实验】【项目1】 图形界面——计算器项目
  • 利用SPSS进行神经网络分析过程及结果解读
  • 聚观早报 |东方甄选将上架文旅产品;IBM首台模块化量子计算机
  • web服务器之——www服务器的基本配置
  • 微信小程序 -- ios 底部小黑条样式问题
  • 白盒测试:探索软件内部结构的有效方法
  • 图论-并查集
  • redis-学习笔记(Jedis 通用命令)
  • C语言:高精度乘法
  • UE4 Niagara学习笔记
  • 多维时序 | Matlab实现GA-LSTM-Attention遗传算法优化长短期记忆神经网络融合注意力机制多变量时间序列预测
  • LeetCode205. Isomorphic Strings
  • Event Driven设计模式