13.Redis 事务

news/2025/1/8 22:25:06/

Redis 事务

  • redis 事务
    • 事务操作
      • multi 开启事务
      • exec 执行事务
      • discard 放弃当前事务
      • watch
      • unwatch

redis 事务

Redis 的事务和 MySQL 的事务概念上是类似的。 都是把⼀系列操作绑定成⼀组。 让这⼀组能够批量执⾏。
Redis 的事务和 MySQL 事务的区别:

  • 弱化的原⼦性: 这里指的是 redis 能够做到把多个操作打包到一起,要么全部执行,要么全都不执行,但是不保证事务执行后一定是成功,事务执行失败后,失败就失败,不进行回滚操作。所以以 mysql的事务的原子性来说,redis可以说是没有原子性。
  • 不具备⼀致性: 不涉及 “约束”。也没有回滚。 MySQL 的⼀致性体现的是运⾏事务前和运⾏后, 结果都是合理有效的, 不会出现中间⾮法状态。
  • 不涉及隔离性: redis 是一个单线程模型的服务器程序,所有的 请求/事务,都是”串行“执行的,也没有隔离级别, 因为不会并发执⾏事务 (redis 单线程处理请求) 。
  • 不具备持久性: 数据是保存在内存的。是否开启持久化, 是 redis-server ⾃⼰的事情, 和事务⽆关。

Redis 事务本质上是在服务器上搞了⼀个 “事务队列”。
开启事务的时候,此时客户端输入的命令,就会发给服务器并且进入这个队列中(而不是立即执行)。当遇到了”执行事务“命令的时候,此时就会把队列中的这些任务都按顺序一次执行。(这些都是在 redis 主线程中完成的)

事务操作

multi 开启事务

作用:开启⼀个事务. 执⾏成功返回 OK.
在这里插入图片描述
每次添加⼀个操作,都会提⽰ QUEUED", 说命令已经进⼊客户端的队列了

exec 执行事务

作用:真正执⾏事务.
在这里插入图片描述

discard 放弃当前事务

在这里插入图片描述

当开启事务,并且给服务器发送了若干个命令之后,此时服务器重启,此时的这个事务该怎么办呢?
此时的效果其实就等同于 discard命令。

watch

作用:在执⾏事务的时候, 如果某个事务中修改的值, 被别的客户端修改了, 此时就容易出现数据不⼀致的问题。

在开启事务之前执行watch

如下图所示:
在这里插入图片描述
假设此时有一个 key,value 为 111,此时有两个客户端,客户端1先开启一个事务,并将key的value设置为222,此时客户端2不开启事务直接set key 333,此时客户端1执行exec命令,让其执行事务,此时就容易引起歧义,是到底key的值是222还是333呢。其实是222。
watch 命令就是⽤来解决上述这个问题的。watch 在该客户端上监控⼀组具体的 key.

  • 当开启事务的时候, 如果对 watch 的 key 进⾏修改, 就会记录当前 key 的 “版本号”. (版本号是个简单的整数, 每次修改都会使版本变⼤. 服务器来维护每个 key 的版本号情况)
  • 在真正提交事务的时候, 如果发现当前服务器上的 key 的版本号已经超过了事务开始时的版本号, 就会让事务执⾏失败. (事务中的所有操作都不执⾏).

在这里插入图片描述

unwatch

取消对 key 的监控。


http://www.ppmy.cn/news/1086121.html

相关文章

翻译句子 前面的路是非常狭窄的 不能翻译成 the ahead of road is narrow 的原因

翻译句子 前面的路是非常狭窄的。The road ahead is very narrow. 可以将句子翻译成 “The ahead of road is narrow.”,但这个翻译可能不太符合英语的表达习惯。更常见的表达方式是 “The road ahead is narrow.”,这样更符合英语的语法和习惯用法。 …

进程、线程、内存管理

目录 进程和线程区别 进程和线程切换的区别 系统调用流程 系统调用是否会引起线程切换 为什么需要使用虚拟内存 进程和线程区别 本质区别: 进程是资源分配的基本单元。 线程是操作系统调度的基本单元。 地址空间: 进程具有独立的虚拟地址空间。 线程…

React笔记(七)Antd

一、登录功能 首先要使用antd,要先下载 yarn add antd 登录页面关键代码 import React from react /*1、如果要在react中完成样式隔离,需要如下操作1)命名一个xx.module.scss webpack要求2) 在需要的组件中通过ES6方式进行导入&#x…

欧科云链研究院探析Facebook稳定币发行经历会不会在PayPal重演

引言 作者最近的报告-探析PayPal发行稳定币是否会重蹈Facebook覆辙-近期被英国的金融时报(中文版)刊登。由于该报告在欧科云链研究院内部反响较好,下面就带大家简单的剖析这篇报告的主要内容。 *这篇文章主要由对比分析(已删减&a…

CocosCreator3.8研究笔记(四)CocosCreator 脚本说明及使用(上)

在Cocos Creator中,脚本代码文件分为模块和插件两种方式: 模块一般就是项目的脚本,包含项目中创建的代码、引擎模块、第三方模块。 插件脚本,是指从 Cocos Creator 属性检查器中导入的插件,一般是引入第三方引入库文件…

Latex表格内换行

遇到表格内容太长,需要换行。 宏包: \usepackage{makecell}使用方法 \begin{center}\tabcaption{表格}\label{tab:2}\renewcommand\tabcolsep{7pt}%调整表格长度\begin{tabular} {cccccccccc}\toprule参数&参数&\makecell{最大\\数值} \\$a$&a…

【LeetCode每日一题合集】2023.8.7-2023.8.13(动态规划分治)

文章目录 344. 反转字符串1749. 任意子数组和的绝对值的最大值(最大子数组和)1281. 整数的各位积和之差1289. 下降路径最小和 II解法1——动态规划 O ( n 3 ) O(n^3) O(n3)解法2——转移过程优化 O ( n 2 ) O(n^2) O(n2) ⭐ 1572. 矩阵对角线元素的和解法…

Pinely Round 2 (Div. 1 + Div. 2) G. Swaps(组合计数)

题目 给定一个长度为n(n<1e6)的序列&#xff0c;第i个数ai(1<ai<n)&#xff0c; 操作&#xff1a;你可以将当前i位置的数和a[i]位置的数交换 交换可以操作任意次&#xff0c;求所有本质不同的数组的数量&#xff0c;答案对1e97取模 思路来源 力扣群 潼神 心得 感…