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

Redis7之事务(五)

五 Redis 事务

5.1 介绍

  • 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化, 按顺序地串行化执行而不会被其他命令插入,不许加塞
  • 一个队列中,一次性、顺序性、排他性的执行一系列命令

5.2 Redis事务和数据库事务

在这里插入图片描述

5.3 基本操作

在这里插入图片描述

正常执行

MULTI   // 事务开始
EXEC    // 执行事务

在这里插入图片描述

放弃事务

MULTI     // 事务开始
DISCARD   // 放弃事务

在这里插入图片描述

全体连坐

MULTI     // 事务开始
EXEC      // 执行

在这里插入图片描述

  • 在MULTI 和 EXEC 之间有一个指令语法错误,所有的命令都不会执行,

冤头债主

  • Redis 不提供事务回滚的功能,开发者必须在事务执行出错后,自行恢复数据库状态
  • 注意和传统数据库事务区别,不一定要么一起成功要么一起失败
MULTI      // 事务开始
EXEC       // 执行 

在这里插入图片描述

Watch 监控

  • Redis使用Watch 来提供乐观锁定,类似于 CAS(Check-and-Set)
    • 悲观锁
      • 认为每次去拿数据都很认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁
    • 乐观锁
      • 认为每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据
      • 提交版本必须 大于 记录当前版本才能执行更新
    • CAS
      • check-and-set(JUC中CAS操作相似)

watch

  • 初始化 键值(k1 和 balance 两个key),先监控再开启multi,保证两key变动在同一事务内 在这里插入图片描述

  • 有加塞篡改的话

    • watch 命令是一种乐观锁的实现,Redis 在修改的时候会检测数据是否被更改,如果更改了,则执行失败 在这里插入图片描述

unwatch

  • 放弃对键值监控

在这里插入图片描述

小结

  • 一旦执行了 exec 之前加的watch监控锁都会被取消掉
  • 当客户端连接丢失的时候(比如退出连接),所有东西都会被取消监视

5.4 总结

  • 开启
    • 以 MULTI 开始一个事务
  • 入队
    • 将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
  • 执行
    • 由EXEC命令触发事务

http://www.kler.cn/a/356.html

相关文章:

  • Python einops库介绍
  • Android `android.graphics` 包深度解析:架构与设计模式
  • OpenCV-Python实战(6)——图相运算
  • Windows Powershell实战指南(未完成)
  • Excel将混乱的多行做成1列
  • 1-Linux 基础入门指南
  • ssh创建秘钥对
  • Golang每日一练(leetDay0005)
  • 算法题-相加为目标数之和(两数之和、三数之和、从数组中取n个数相加为m(不可重复取)、从数组中取任意个数相加为m(可重复取))
  • Windows逆向安全(一)之基础知识(二)
  • 「Vue面试题」动态给vue的data添加一个新的属性时会发生什么?怎样去解决的?
  • 【微信小程序】-- 网络数据请求(十九)
  • 嵌入式软件开发之Linux 用户权限管理
  • 一文带你吃透操作系统
  • java-正装照换底色小demo-技术分享
  • 用Python Flask为女朋友做一个简单的网站(附可运行的源码)
  • 【入门4 数组】P5728 【深基5.例5】旗鼓相当的对手——结构体
  • 2023年网络安全比赛--attack(新)数据包分析中职组(超详细)
  • 基于Qt WebEngine 的Web仪器面板GUI程控技术
  • 力扣-股票的资本损益
  • Linux磁盘和文件系统管理
  • 我一个普通程序员,光靠GitHub打赏就年入70万,
  • Matplotlib从入门到精通05-样式色彩秀芳华
  • 十大经典排序算法(上)
  • 30岁了,说几句大实话
  • 大数据核心技术是什么