redis执行日志_Redis之坑:Redis与MySQL中事务的区别

2023-11-11

MySQL:

  • BEGIN:显式地开启一个事务;
  • COMMIT:提交事务,将对数据库进行的所有修改变成为永久性的;
  • ROLLBACK:结束用户的事务,并撤销正在进行的所有未提交的修改;

Redis:

  • MULTI:标记事务的开始;
  • EXEC:执行事务的commands队列;
  • DISCARD:结束事务,并清除commands队列;

Redis之坑:理解Redis事务 中我们通过类比MySQL的BEGAIN ,COMMIT ,ROLLBACK 来理解Redis的事务命令。但是显然,它们有着本质区别。

默认状态

MySQL:

  • MySQL会默认开启一个事务,且缺省设置是自动提交,即,每成功执行一个SQL,一个事务就会马上 COMMIT。所以不能Rollback。

Redis:

  • Redis默认不会开启事务,即command会立即执行,而不会排队。并不支持Rollback(详情可见:Redis之坑:理解Redis事务 )

使用方式

MySQL:包含两种

  1. 用 BEGIN, ROLLBACK, COMMIT,显式开启并控制一个新的 Transaction。
  2. 执行命令SET AUTOCOMMIT=0,用来禁止当前会话自动commit,控制默认开启的事务

Redis:

  1. 用 MULTI, EXEC, DISCARD,显式开启并控制一个Transaction(注意:这里没有强调“新的”,因为默认是不会开启事务的)。

实现原理

很容易理解,Redis与MySQL中事务的区别其根本原因就是实现不同方式造成的。

MySQL:

  • MySQL实现事务,是基于UNDO/REDO日志 。
  • UNDO日志 记录修改前 状态,ROLLBACK 基于UNDO日志实现;
  • REDO日志 记录修改后 的状态 ,COMMIT 基于REDO日志实现;
  • 在MySQL中无论是否开启事务,SQL都会被立即执行并返回执行结果。只是**事务开启 **后执行后的状态 只是记录在REDO日志 ,执行COMMIT 之后,数据才会被写入磁盘 。
int insertSelective = serviceOrderMapper.insertSelective(s);复制代码

所以,上述代码,insertSelective 将会被立即赋值(无论是否开启事务,只是结果或未被写入磁盘 ):

insertSelective = 受影响的行数;复制代码

Redis:

  • Redis实现事务,是基于COMMANDS队列 。
  • 如果没有开启事务,command 将会被立即执行并返回执行结果,并且直接写入磁盘;
  • 如果事务开启,command 不会被立即执行,而是排入队列并返回排队状态 (具体依赖于客户端(例如:spring-data-redis)自身实现)。调用EXCE 才会执行COMMANDS队列 。
boolean a = redisTemplate.opsForZSet().add("generalService
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis执行日志_Redis之坑:Redis与MySQL中事务的区别 的相关文章

  • 服务器上传excel文件并读取数据,ASP.NET中上传并读取Excel文件数据示例

    在CSDN中 经常有人问如何打开Excel数据库文件 本文通过一个简单的例子 实现读取Excel数据文件 首先 创建一个Web应用程序项目 在Web页中添加一个DataGrid控件 一个文件控件和一个按钮控件 在代码视图中首先导入OleDb
  • Appium自动化框架从0到1之 框架结构组成

    从0到1搭框架 框架背景 框架功能 框架视图 框架背景 可能会利用一周的时间 我们来写一个Appium自动化框架的搭建 从0到1 跟着小鱼一起 完善Android 的自动化框架体系 框架模式 PO 语言 python3 7 Appium 1
  • mac 利器

    mac 利器 攒了很久的钱 环境彻底迁移到mac os 下 总结下自己使用的一些工具 从win到mac的一些工具迁移可以看老的文章 win下的mac利器替代品 这一篇主要集中在mac下的工具体会和使用心得距离上一次更新 应该很久了 上一次是
  • Flutter之修改AppBar的高度

    全局 设置AppBar的主题中的toolbarHeight override Widget build BuildContext context return GetMaterialApp title Flutter Demo debugS
  • <vulnhub>-记一次实验Load of The Root

    Load of The Root 一 信息收集 1 主机探测 探测到主机IP 192 168 88 159 2 端口扫描 扫描到端口只开放了一个22端口 尝试使用SSH连接 Easy as 1 2 3 端口碰撞 端口上的防火墙通过产生一组预
  • MyBatis-Plus-Generator代码生成器(Version 3.5.1+)使用

    这几天研究了一下MyBatis Plus Generator新版本3 5 1 的使用 做个笔记方便自己使用 maven配置
  • C/C++数字字符串与数字之间的相互转化

    目录 1 数字字符串转化为数字 1 1 C语言方法 1 2 C 方法 2 数字转化为数字字符串 2 1 C语言方法 2 2 C 方法 1 数字字符串转化为数字 1 1 C语言方法 1 sscanf sscanf读取格式化的字符串中的数据 s
  • libcublas.so.9.2: cannot open shared object file: No such file...问题原因及解决方法

    sudo ldconfig usr local cuda 9 0 lib64
  • late_initcall()与module_init()

    内核初始化的模块 当它们静态链接到内核时 的init例程被包装在一个initcall 宏中 该宏指示应该在启动顺序中运行它们的时间 请参阅包含文件 include linux init h以获取宏列表及其排序
  • Windows子系统for Linux Ubuntu安装位置转移

    默认情况下 Windows安装了Linux子系统后 以Ubuntu18 04为例 安装位置是在C Users XXXXXXXX AppData Local Packages CanonicalGroupLimited Ubuntu18 04
  • 【环境空气质量评价挑战赛】baseline——使用lightgbm+特征工程。

    赛题 一 赛事背景 随着工业化和城镇化的快速发展 环境问题日益突出 空气污染是全球最重要的环境问题之一 影响着人们的健康 生产和生活 为了改善空气质量 我国加大监测和环保力度 增加空气质量监测站点 实施蓝天保卫战 并将空气质量水平与污染治理
  • Polkit (简体中文)

    翻译状态 本文是 Polkit 的翻译 上次翻译日期 2018 10 21 如果英文版本有所更改 则您可以帮助同步翻译 来自 polkit 主页 polkit 是一个应用程序级别的工具集 通过定义和审核权限规则 实现不同优先级进程间的通讯
  • 漂亮的登录界面中的css示意图

    效果图 示意图 html div class login Box img src images user png alt h3 登录 h3 div
  • ajax不刷新页面,只重新加载js文件的方法

    ajax不刷新页面 只重新加载js文件的方法 重新加载js文件 给js定个id 重新加载 jquery的就直接使用getScript 重新加载js文件 function loadJs file var head head remove sc
  • 数学基础(一)——最小二乘法

    最小二乘法 LS 算法 是统计分析中最常用的逼近计算的一种算法 其交替计算结果使得最终结果尽可能地逼近真实结果 LS 算法是一种数学优化技术 也是一种机器学习常用算法 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地
  • TCP协议的RST标志

    下文中的内容多数来自 参考 中的文章 这边进行一个整理和总结 后续会慢慢增加出现各个 RST 包的测试代码 便于理解 TCP的 断开连接 标志 RST 标志 Reset 复位标志 用于非正常地关闭连接 它是 TCP 协议首部里的一个标志位
  • IDEA无法链接代理The driver has not received any packets from the server.

    问题如下 1 本地部署Proxifier 且设置全局代理 截图如下 代理工具 2 通过Navicat 工具连接该远程数据库 连接正常 截图如下 3 通过IDEA或者Eclipse连接 通过代理 抛连接失败 数据库地址绝对无误 如果把数据库地
  • IText实现对PDF文档属性的基本设置

    一 Itext简介 iText是著名的开放源码的站点sourceforge一个项目 是用于生成PDF文档的一个java类库 通过iText不仅可以生成PDF或rtf的文档 而且可以将XML Html文件转化为PDF文件 iText的安装非常
  • System.InvalidCastException: Unable to cast object of type ‘System.Boolean‘ to type ‘System.SByte‘.

    记录一次 NET CORE下的异常 两个解决方案 异常信息如下 System InvalidCastException Unable to cast object of type System Boolean to type System

随机推荐