Redis7之事务(五)
创始人
2025-05-28 14:09:08

五 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命令触发事务

相关内容

热门资讯

基于bearpi的智能小车--... 基于bearpi的智能小车--Qt上位机设计 前言一、界面原型1.主界面2.网络配置子窗口模块 二、...
三、Java核心技术(进阶)-... 一、概念 国际化编程:通过一套软件适配多个语言包。 二、相关函数 java.util....
水声功率放大器与宽带匹配技术研...   作为声呐设备重要的一份子,水声信号发射机承担着非常重要的作用。水声信号发射机其实是...
【C++】12.继承 1.引入继承 学生管理系统 学生 老师 社管阿姨 保安大叔 4个类 4个类有很多重复的东西...
LINUX中atd和crond... 一、atd与crond的区别1、运行方式不同,at只运行一次,而cron...
C++数据结构 —— 哈希表、... 目录 1.哈希概念 1.1哈希函数 1.2哈希冲突 2.闭散列实现 3.开散列实现 4.容器的封装 ...
Streamlit 学习笔记1 Streamlit 学习笔记1 文章目录Streamlit 学习笔记1首先 安利下streamlit...
基层区域应用平台为目标开发的基... 系统特点:  JAVA语言开发,MYSQL数据库,B/S架构 基于云计算...
数智链接,新一代校园招聘解决方... 疫情3年市场巨变,00后新生代初登上求职舞台,中和作用下,...
面试官:rem和vw有什么区别 "rem" 和 "vw"的区别 "rem" 和 "vw" 都是用于网页设计的CSS单位。 "rem"...
Pytest自动化测试框架完美... 简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网...
华为nat配置实验:内网能够访... 一 需求分析1.1 需求 公司A在北京,公司B在上海,本次实验仅仅模拟局...
事务日志与 两阶段提交 文章目录 Redo Logredo的优点redo的组成redo的整体流程不同刷盘策略演示 Undo ...
【目标跟踪算法】Strong ... 1. Strong SORT算法的背景和概述 Strong SORT算法基于经典的Deep SORT...
Lock接口——JUC随记2 1、synchronized 1.1、synchronized的三种应用方式 一. 修饰实例方法&#...
IO流之字符流 文章目录1. 字符流概述2. 编码表3. 编码和解码4. 写数据的方式5. 读数据的方式6. 转换流...
C语言的灵魂---指针(基础) C语言灵魂指针1.什么是指针?2.指针的大小3.指针的分类3.1比较常规的指针类型3....
【华为OD机试真题JAVA】最... 标题:最优策略组合下的总的系统消耗资源数问题 | 时间限制:1秒 | 内存限制:262144K | ...
MATLAB | 给热图整点花... 前段时间写的特殊热图绘制函数迎来大更新,基础使用教程可以看看这一篇: h...
小知识·BitTorrent ... BitTorrent 简介从 P2P 说起经常在网上飙车的老司机应该都知道 BT 下载,...
Redis和Memcached...         对于大多数的系统服务来说,缓存是提高性能和可伸缩性的关键。一般情况下我...
[牛客算法总结]:重建二叉树    标签: 二叉树、DFS、先序遍历、中序遍历、递归   题目: 给定...
VS Code 将推出更多 A... 大家好,欢迎来到我们的二月更新!我们将为您带来与 JUnit 5 并行测...
为什么要推荐使用pnpm 在谈起pnpm时先来聊一聊之前的npm和yarn有什么存在的问题  npm2 在npm3之前我们安装...
多线程开发 文章目录多线程开发1. Thread创建多线程2. ThreadPoolExecutor创建进程池a...
闪存系统性能优化方向?NAND... Hello 大家好, 我是元存储~ 目录 前言 1. 提升效果 2. Cache Re...
关于复杂链表的复制问题(力扣) 上面我们已经说了两个关于链表的实现了,其中一个是单链表,另外一个是双向带...
STM32学习(二) 常用开发工具简介 安装仿真器驱动 DAP仿真器免驱ST LINK仿真器驱动安装方法:...
K8s配置jenkins Ma... 1、k8s安装jenkins 以阿里云的ACK为例 A、在有状态点击镜像创建,配置自己...
2023年新一代设备管理系统—... 设备管理是指在企业或者工厂对设备的生命周期进行管理、维护和保养等工作。设备管理系统是企业内部的信息管...