02. Redis 事务

文章目录

  • Redis 事务
    • 执行事务
    • 放弃事务
    • 编译性异常
    • 运行时异常

Redis 事务

Redis 单条明令是原子性的,但Redis事务不保证原子性。

事务的本质就是:一组命令一起执行!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行!

一次性、顺序性、排他性。

Redis事务没有隔离级别的概念。 所有的命令在事务中,并没有被直接执行!只有在发起执行命令的时候才会执行!

原子性:要么一起成功,要么一起失败

执行事务

Redis 事务:

  • 开启事务(multi);
  • 命令入队;
  • 执行事务(exec)。
127.0.0.1:6379> multi # 开启事务
OK
127.0.0.1:6379(TX)> set k1 v1 # 命令入队
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> exec # 执行事务
1) OK
2) OK
3) "v2"
4) OK

放弃事务

放弃事务后,队列中的命令都没有执行!

127.0.0.1:6379> multi # 开启事务
OK
127.0.0.1:6379(TX)> set k1 v1 
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> set k1 v11
QUEUED
127.0.0.1:6379(TX)> discard # 放弃事务
OK
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> get k1
"v1"

编译性异常

代码有问题,命令有错!事务中所有的命令都不会执行!

127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set k1 v1 
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> getset k3 # 错误的命令,客户端会给出错误提示,但不会断开事务
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> 
127.0.0.1:6379(TX)> set k4 v4 
QUEUED
127.0.0.1:6379(TX)> set k5 v5
QUEUED
127.0.0.1:6379(TX)> exec # 执行会报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k5 # 事务中的命令都没有执行
(nil)

运行时异常

如果事务队列中存在语法性错误,那么执行命令的时候,其他命令是可以执行的!错误命令会抛出异常!(所以说没有原子性)

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set k1 v1 
OK
127.0.0.1:6379> incr k1 # 这是一条有问题的命令(执行时会报错)
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 
127.0.0.1:6379> multi 
OK
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> incr k1 # 错误命令入队
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> exec # 有错误的命令报错了,其他命令成功了
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
4) OK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-05-19 问AI: 大语言模型的BPE方向是什么意思?

文心一言 大语言模型的上下文中,BPE(Byte-Pair Encoding)是一种常用的子词单元(subword unit)编码方法,尤其在处理自然语言处理任务时。这种方法的主要目的是解决自然语言中的词汇表大小问题,特…

mock.js和apifox模拟接口的能力

mock.js 和 Apifox 都是前端开发中常用的工具,用于模拟后端接口和数据。下面是它们的主要特点和模拟接口的能力的比较: mock.js mock.js 是一个用于生成随机数据的 JavaScript 库。它允许你定义数据模板,并生成模拟数据。mock.js 主要用于前…

VSCode下STM32开发环境搭建

VSCode下STM32开发环境搭建 需要的软件 make-3.81 https://udomain.dl.sourceforge.net/project/gnuwin32/make/3.81/make-3.81.exe arm-none-eabi-gcc https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads https://links.jianshu.com/go?tohttps%3A%2F%…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置

1、Gpt组件包含的子配置项 GptDriverConfigurationGptDemEventParameterRefsGptConfigurationOfOptApiServicesGptChannelConfigSet2、GptDriverConfiguration 2.1、GptAlreadyInitDetCheck 该参数启用/禁用Gpt_Init API中的GPT_E_ALREADY_INITIALIZED Det检查。 true:开启Gpt_…

Django5+React18前后端分离开发实战13 使用React创建前端项目

先将nodejs的版本切换到18: 接着,创建项目: npx create-react-app frontend接着,使用webstorm打开这个刚创建的项目: 添加一个npm run start的配置: 通过start启动服务: 浏览器访问&…

机器学习之决策树算法

使用决策树训练红酒数据集 完整代码: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn import tree, datasets from sklearn.model_selection import train_test_split# 准备数据,这里…

【云原生】Kubernetes 核心概念

什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”,它…

科大讯飞笔试题---删除数字

1、 题目描述: 给定一个长度为 n 的数组,数组元素为 a1, a2, . . , an,每次能删除任意 a 的任意一位,求将所有数字变成 0 最少需要几步。例如 103 若删除第 1 位则变成 3; 若删除第 2 位则变成13; 若删除第 3 位则变成 10。 输入…

AWS容器之Amazon ECS

Amazon Elastic Container Service(Amazon ECS)是亚马逊提供的一种完全托管的容器编排服务,用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。

c语言如何将一个文本内容复制到另外一个文本里

c语言如果要把一个文本文件的文件复制到另外一个文件里&#xff0c;代码如下 #include<stdio.h>int main() {FILE *fp1,*fp2;char a;fp1fopen("D://cyy//aaa.txt","r");fp2fopen("ccc.cpu","w");while(a!EOF){afgetc(fp1);fput…

linux:切分大文件

文章目录 1. 前言2. 用法3. 例子 1. 前言 如果传输、存储过程中出现大文件&#xff0c;希望切分成小文件。在 Linux 中&#xff0c;可以使用多种工具来切分大文件&#xff0c;最常用的是 split 命令。split 命令可以将一个大文件按照指定大小切分成多个小文件。 2. 用法 spl…

ImageMagick入门教程(免费图片格式转换)

起因是因为我不会图片转换,且发现很多图片转换都要钱,尤其是pdf转jpg,于是我就是找到了这个包,自己处理.当然包时不会导的,所以只能用它提供的命令了. 准备工作 下载imagemagick:ImageMagick – Download 我下载的这个,傻瓜式安装就行,把所有勾勾都勾上,然后要记住安装路径,然…

一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)

目录 ​编辑 引言 一、RDMA的基本原理 二、RDMA的主要特点 三、RDMA的编程接口 四、RDMA的代码演示 服务器端代码&#xff1a; 客户端代码&#xff1a; 五、总结 引言 RDMA&#xff0c;全称Remote Direct Memory Access&#xff0c;即远程直接内存访问&#xff0c;是…

客户机/服务器交互模式

目录 概述 网络应用软件的地位和功能 C/S 模式的特性 容易混淆的术语 C/S 模式的通信过程 网络协议与 C/S 模式的关系 错综复杂的 C/S 交互 总结 概述 客户机/服务器&#xff08;Client/Server&#xff0c;简称 C/S&#xff09;交互模式是一种常见的网络应用软件架构&a…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容&#xff0c;有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

python+selenium - UI自动框架之封装查找元素

单一的元素定位方法不能满足所有元素的定位&#xff0c;可以根据每个元素的特点来找到合适的方法&#xff0c;可以参考下图的方法&#xff1a; elementFind.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_con…

Vue filter实战详解

在 Vue.js 中&#xff0c;filter 是一种用于在模板中对数据进行格式化的功能。它可以用来对数据进行处理、过滤或格式化&#xff0c;然后在模板中直接使用。 filter 是一种全局的 Vue 实例方法&#xff0c;可以在任何组件的模板中使用。 1.定义全局过滤器&#xff1a; 在 Vue…

InnoDB如何解决幻读的

InnoDB 使用一种称为 Next-Key Locking 的锁机制来解决幻读问题。幻读发生在一个事务在读取某个范围内的记录时&#xff0c;另一个事务在这个范围内插入新的记录。InnoDB 的 Next-Key Locking 结合了行锁&#xff08;Row Lock&#xff09;和间隙锁&#xff08;Gap Lock&#xf…

MavLinK协议

由于在公司需要使用这个&#xff0c;我就写一个文章用于入门级别 简单介绍 MAVSDK是PX4开源团队贡献的基于mavlink通信协议的用于无人机应用开发的SDK&#xff0c;其可以部署在Windows、Linux、Android等多种平台&#xff0c;并且支持多种语言如c/c、python、Java等。 在官网…