说说 Redis 事务

更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记

Redis 事务简介

Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中。命令的执行过程是顺序执行的,但不能保证原子性。无法像 MySQL 那样,有隔离级别,出了问题之后还能回滚数据等高级操作。后面会详细分析。

Redis 事务基本指令

Redis 提供了如下几个事务相关的基础指令。

  • MULTI开启事务,Redis 会将后续命令加到队列中,而不真正执行它们,直到后续使用 EXEC来原子化的顺序执行这些命令
  • EXEC执行所有事务块内的命令
  • DISCARD取消事务,放弃执行事务块内所有的命令
  • WATCH监视一个或多个 key,若事务在执行前,这些 key 被其他命令修改,则事务被终端,不会执行事务中的任何命令
  • UNWATCH取消 WATCH命令对所有 keys 的监视

一般情况下,一个简单的 Redis 事务主要分为如下几个部分:

  1. 执行命令 MULTI开启一个事务。
  2. 开启事务之后,执行命令的多个命令会依次被放入一个队列,放入成功则会返回 QUEUED消息。
  3. 执行命令 EXEC提交事务,Redis 会依次执行队列中的命令,并依次返回所有命令的结果。(若想放弃提交事务,则执行 DISCARD)。

下图简单介绍了下 Redis 事务执行的过程:

说说 Redis 事务

实例分析

下面我们来通过一些实际具体例子,来体会下 Redis 中的事务。前面我们也说到 Redis 的事务不是正真的事务,是无法完全满足标准事务的 ACID特性的。通过下面的例子,我们来看看,Redis 的”破产版”事务到底存在什么问题。

  • [A]正常执行提交
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET a 1
QUEUED
127.0.0.1:6379> SET b 2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
127.0.0.1:6379> GET a
"1"
127.0.0.1:6379> GET b
"2"

开启事务后,提交的命令都会加入队列(QUEUED),执行 EXEC 后会逐步执行命令并返回结果。这个看起来是不是和我们平时使用 MySQL 的事务操作相似,类似 start transaction 和 commit。

  • [B]正常取消事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET a 1
QUEUED
127.0.0.1:6379> SET b 2
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379>
127.0.0.1:6379> GET a
(nil)
127.0.0.1:6379> GET b
(nil)

开启事务后,若不想继续事务,使用 DISCARD 取消,前面提交的命令并不会真正执行,相关的 key 值不变。这个看起来也和 MySQL 的事务相似,类似 start transaction 和 rollback。

  • [C]WATCH 监视 key

`c
— 线程 1 中执行
127.0.0.1:6379> del a
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> SET a 0
OK
127.0.0.1:6379> WATCH a
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET a 1
QUEUED

Original: https://www.cnblogs.com/immaxfang/p/16837796.html
Author: immaxfang
Title: 说说 Redis 事务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/799916/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Django春节笔记1

    Django 组件 基本配置文件、路由系统 模型层M,模板层T,视图层V cookies session 分页、发邮件 admin管理后台 用途 只要是HTTP请求的,网站、微信公…

    Python 2023年8月5日
    057
  • 操作异常备忘录(python篇)

    操作异常备忘录-python篇 正则表达式 * 1.正则表达式模板 2.多符号分割–re.split 数据处理常用操作 * 1.替换或删除字符串中指定字符 2.Data…

    Python 2023年8月11日
    040
  • python之字典基础相关

    描述: [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stop…

    Python 2023年6月3日
    082
  • Numpy:数组(Ndarray)操作之数组的转换

    文章目录 数组转换 * 数组转为其他类型 数组元素数据类型转换 数组的副本和视图 – 概念 方法 数组操作的内容较多,主要以对数组的转换,数组变化形状,对数组元素进行选…

    Python 2023年8月23日
    066
  • SPL工业智能:原料与产品的拟合

    问题提出 工业生产活动的目标是利用原料生产产品,从而产生利润。原料经过一系列加工过程,包括物理反应和化学反应,最终形成产品,生产的理想状态是原料到产品的转换率是确定的,工厂想生产多…

    Python 2023年11月7日
    043
  • 【建议收藏】机器学习数据预处理(五)——特征选择(内附代码)

    📌引言 本节我们开始介绍特征选择的相关内容,好的特征对后续的机器学习模型构建有很大的帮助,很有可能会大大提高模型的准确率。 📌特征选择 在进行了数据预处理以及特征构造后,我们需要对…

    Python 2023年9月28日
    050
  • python—matplotlib详细教程(完结)

    文章每个图都带有案例,欢迎访问!!! 目录 如何选择合适的图表 绘制简单的折线图 图表常用设置 颜色设置 线条样式和标记样式 画布设置 设置坐标轴标题 plt.rcParams[&…

    Python 2023年8月30日
    075
  • 超级完整的 Git 下载、安装与配置

    Git的下载、安装、配置与使用 以及命令 一、Git下载安装 1、访问git官方下载网址, 点击这里 ,然后根据自己的电脑系统,下载对应的安装包: ; 2、在 淘宝镜像网站 下载对…

    Python 2023年11月9日
    039
  • 第3章 数据分析工具Pandas

    1,掌握 数据结构分析,索引操作及高级索引 2,掌握 算术运算与数据对齐,数据排序 3,掌握 统计计算与描述 ,层次化索引 4,掌握 读写数据操作 Pandas中有两个主要的数据结…

    Python 2023年8月17日
    046
  • Flask的安装

    1,创建应用目录: $mkdir flasky $cd flasky 2,创建虚拟环境:(在Python3中创建虚拟环境)如果使用的是Ubuntu Linux系统预装的Python…

    Python 2023年8月13日
    082
  • 20212218林思凡 Python技能树及CSDN MarkDown编辑器测评

    课程:《Python程序设计》 班级:2122 姓名:林思凡 学号:20212218 实验教师:王志强 实验日期:2022年4月17日 必修/选修:公选课 已在CSDN上发表文章,…

    Python 2023年6月10日
    068
  • 在pycharm菜单中使用虚拟环境建立Django项目失败(适用创建虚拟环境失败的情况)

    在pycharm菜单中使用虚拟环境建立Django项目失败 1.报错介绍 2.关键报错信息 3.报错分析 4.解决方案1 5.解决方案2 1.报错介绍 博主今日在使用pycharm…

    Python 2023年8月5日
    045
  • python 打包成可执行文件双击运行闪退终极解决方案

    python打包成.exe可执行文件之后常常出现双击之后闪退的情况,而闪退的时候更是无从知道问题出在哪,在网上搜索程序闪退的解决方案的时候诸多尝试有时可以解决问题又是又不可以,根据…

    Python 2023年8月2日
    045
  • HTTP and Flask Basics -HTTP介绍

    Hypertext Transfer Protocol (HTTP) is a protocol that provides a standardized way for comp…

    Python 2023年8月11日
    053
  • 第20章 网络爬虫 Scrapy

    安装:pip install scrapy 优点:在scrapy提供的模板的基础上改写部分代码,减少了自行编写的代码量 缺点:要在CMD界面和python编辑界面间来回切换;无法提…

    Python 2023年10月2日
    040
  • Vue+Django+Restframework+Nginx前后端分离项目部署

    先介绍技术栈: 1.安装python 2.安装nginx 3.安装uwsgi,直接使用pip安装。 4.上传写好的的代码包。 5.配置uwsgi文件 6.配置Nginx配置文件: …

    Python 2023年8月5日
    026
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球