Redis--事务机制的详解及应用
Redis事务的概念:
Redis事务就是将一系列命令包装成一个队列,在执行时候按照添加的顺序依次执行,中间不会被打断或者干扰,在执行事务中,其他客户端提交的命令不可以插入到执行事务的队列中,简单来说Redis事务就是一次性、顺序性、排他性的执行一些列命令。
Redis事务的特点:
- Redis事务不保证原子性,Redis中单个命令是原子性的,但是Redis事务不保证原子性,且不会回滚,当一组命令中有某个命令执行失败后,后续的命令会继续执行。
- Redis事务单独的隔离操作,事务中的所有命令都会序列化、按顺序执行,在执行过程中,不会被其他的客户端发送的命令插入。
- 没有隔离级别的概念,队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行,事务开始执行后,其他客户端的命令也无法插入。
- Redis事务中命令格式错误不会执行,但是如果格式正确,但是运行错误(例如list进行incr操作),最终正常的命令会正常执行,发生错误的不执行,这个时候就要处理数据一致性的问题了。
Redis事务的主要作用就是串联多个命令防止别的命令插队。
Redis事务常用命令:
命令 | 描述 |
---|---|
multi | 开启事务命令,后续命令依次进入队列 |
exec | 执行事务,如果被监听的key没有被修改,就执行事务,否则回滚 |
discard | 取消事务,发生在mulit之后exec之前,执行该命令后,不能再继续执行exec命令了 |
watch key1 [key2 …] | 用于监视一个或多个key,如果在事务执行之前,key被其他命令所改动,那么事务将被打断 |
unwatch key1 [key2 …] | 取消 WATCH 命令对所有 key 的监视 |
Redis事务的执行步骤:
- 开启事务:mulit,执行此命令后,开启Redis事务,后续的所有指令都添加到事务中。
- 命令入队:将所有的命令加入队列。
- 执行事务:exec,执行此命令后,事务开始执行,Redis依次开始执行队列中的命令,其他命令不可插队或打断了。
- exec,执行此命令后,事务开始执行,Redis依次开始执行队列中的命令,其他命令不可插队或打断了。
图例:
watch命令:
- watch命令是一个乐观锁,他可以在执行事务之前监控Redis中任务数量的key,并在执行exec的时候,检查这些key是否被修改过,如果修改过,事务就会拒绝执行。
- 用来判断事务执行是否安全,在执行multi命令之前,先执行watch key1 key2 …命令,对目标key进行监视,最后在执行exec命令事,Redis会检查这些key否打开了REDIS_DIRTY_CAS标识,如果打开,则事务可以正常执行,否则事务会拒绝执行。
unwatch的命令:
取消watch命令监视的key,如果再执行unwatch命令之前,已经执行了exec或者discard命令,那就无需执行unwatch命令了。
Redis事务的使用场景:
- 用户命令打包,批量操作的场景,以此来减少Redis服务器的通讯次数。
- 多个命令需要顺序操作的时候,因为Redis事务中的命令是顺序执行的。
总体来说Redis事务在实际业务中使用较少,且Redis事务不支持回滚,需要谨慎使用。
如有不正确的地方请各位指出纠正。
相关文章:

Redis--事务机制的详解及应用
Redis事务的概念: Redis事务就是将一系列命令包装成一个队列,在执行时候按照添加的顺序依次执行,中间不会被打断或者干扰,在执行事务中,其他客户端提交的命令不可以插入到执行事务的队列中,简单来说Redis事…...

路由器端口映射如何配置?
在网络通信中,路由器是一个重要的设备,它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置,可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…...

力扣34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
Problem: 34. 在排序数组中查找元素的第一个和最后一个位置 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem: 二分查找常用解题模板(带一道leetcode题目) 直接套用上述中的寻找左、右边界的二分查找模板即可 复杂度 时间复杂度: O ( l o g n )…...

【每日一题】3.2 求逆序对
题目描述 给定一个长度为 n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i个和第 j个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n…...
NTP时间源服务器(NTP网络时钟)助力智慧医院数字化
NTP时间源服务器(NTP网络时钟)助力智慧医院数字化 NTP时间源服务器(NTP网络时钟)助力智慧医院数字化 目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。 随着计算机网络应用的不断涌现,计算机的时…...

Benchmark学习笔记
小记一篇Benchmark的学习笔记 1.什么是benchmark 在维基百科中,是这样子讲的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…...

Linux中的动静态库
目录 一、静态库 (1)静态库的优缺点: (2)Linux下静态库的创建和执行 1.直接编译编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 (1)动态库的优缺点 ÿ…...

C/C++基础语法
C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组(两种方式puts和printf&#…...

Home Assistant:基于Python的智能家居开源系统详解
Home Assistant:基于Python的智能家居开源系统详解 在数字化和智能化的时代,智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备,实现自动化和个性化的居住体验。其中,Home Assistant作为一款基于Pyt…...
使用vscode进行简单的多文件编译
安装好必要的插件后(如C/C,code runner等)默认生成task.json即可进行单文件运行 涉及到多文件情况可以修改task.json如下: {"version": "2.0.0","tasks": [{"type": "cppbuild&quo…...

Python实现PPT演示文稿中视频的添加、替换及提取
无论是在教室、会议室还是虚拟会议中,PowerPoint 演示文稿都已成为一种无处不在的工具,用于提供具有影响力的可视化内容。PowerPoint 提供了一系列增强演示的功能,在其中加入视频的功能可以大大提升整体体验。视频可以传达复杂的概念、演示产…...

Mysql学习之MVCC解决读写问题
多版本并发控制 什么是MVCC MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之࿰…...
Linux下如何生成coredump文件
引言 在linux下执行程序,当出现coredump时,却发现没有生成core文件,或者生成了core文件却不知道在哪里,下面就讲述如何产出core文件,以及指定core文件的产出格式与路径。 打开core文件的大小限制 ulimit -c unlimit…...

eltable 合计行添加tooltip
eltable 合计行添加tooltip 问题描述: eltable 合计行单元格内容过长会换行,需求要求合计行数据超长显示 … ,鼠标 hover 时显示提示信息。 解决方案:eltable合计行没有对外的修改接口,想法是 自己实现一个tooltip&a…...
Secure Boot(安全启动)
Secure Boot(安全启动)的原理基于链式验证,这是一种确保计算机在启动过程中只加载和执行经过认证的软件的机制。这个过程涉及到硬件、固件和操作系统的多个层面。以下是Secure Boot的基本原理: 密钥和证书:Secure Boot…...
大厂面试经验:如何对加密后的数据进行模糊查询操作
加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路。 为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有:密码、手机号、电话号码、详细地址、银行卡号、信用卡验证码等信息…...

修改docker默认存储位置【高版本的docker】
一、修改docker默认存储位置 1、停服务 systemctl stop docker 2、修改/etc/docker/daemon.json添加新的dcoker路径 如"data-root": "/mnt/hdd1/docker" 3、保存后重启服务:systemctl restart docker 二、其他服务的命令 systemctl disab…...

CleanMyMac X2024免费Mac电脑清理和优化工具
CleanMyMac X是一款专业的 Mac 清理和优化工具,它具备一系列强大的功能,可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点: 智能清理:CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…...

吴恩达机器学习全课程笔记第四篇
目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇,第三篇笔记请见: 吴恩达机器学习全课程笔记第…...
大数据分析师常用函数
常用函数 当进行大数据分析时,SQL中的函数非常丰富,以下是更详细的展开: 窗口函数 (Window Functions): ROW_NUMBER(): 为结果集中的每一行分配一个唯一的整数,用于排序。RANK(): 为结果集中的每一行分配一个排名,相同值会有相同的排名,但会跳过相同排名数量。DENSE_RAN…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...