Redis篇-3--原理篇2--Redis事务
1、概述
Redis 提供了简单的事务机制,Redis 事务的本质是一组命令的集合。当执行redis事务时,即一次性按照添加顺序依次执行这些命令,中间不会被打断或者干扰。
Redis 的事务机制并不像关系型数据库中的事务那样提供完整的ACID特性(原子性、一致性、隔离性和持久性),但它确实提供了一种方式来确保一组命令作为一个整体被执行。
2、redis事务的命令
Redis 事务通过 MULTI、EXEC、WATCH 和 DISCARD 这四个命令来实现。
(1)、MULTI
MULTI 命令用于标记一个事务块的开始。一旦接收到 MULTI,Redis 会将之后接收到的所有命令放入队列中,而不是立即执行。这些命令会在稍后的 EXEC调用时一起执行。
语法: MULTI
使用示例:
(2)、EXEC
EXEC 命令用于执行之前由 MULT` 标记的所有命令。它会按照它们被加入队列的顺序执行所有命令,并一次性返回所有命令的结果。
如果在 MULTI 和 EXEC之间有 WATCH 监视的键被修改,则 EXEC将返回 null,表示事务失败。
语法: EXEC
使用示例:
(3)、WATCH
WATCH 命令用于实现乐观锁。它允许你监视一个或多个键,在 EXEC 执行之前,如果这些键被其他客户端修改过,那么整个事务将不会执行,EXEC 会返回 nil。WATCH必须在 MULTI 之前调用。
语法: WATCH key [key …]
使用示例:
打开两个redis-cli客户端
1、右侧客户端先监听user:1000:credits值,在开启事务。
2、左侧客户端重置user:1000:credits的值为3;
3、右侧客户端在自增user:1000:credits的值,在提交事务
4、返回nil,因为有其他的客户端修改了监听的值,所以事务失败了。
(4)、DISCARD
DISCARD 命令用于取消一个事务,清空事务队列,并恢复到正常状态。这意味着在 MULTI 和 DISCARD 之间的所有命令都不会被执行。DISCARD 通常在事务执行前发现某些条件不满足时使用,以避免执行不必要的命令。
语法: DISCARD
使用示例:
(5)、watch实现Redis事务锁(了解下):
Redis 事务本身并不提供锁机制,但它可以通过 WATCH 命令和乐观锁的概念来处理并发问题。
如下图的示例中,两个客户端同时修改INCR user:1000:credits的值,就会出现问题。
左侧客户端看到的结果是,3自增之后变成了5,是不是很奇怪?如果换成卖票的场景,最后一张票被卖了两次,余量变成了-1,那不就出大问题了吗?
解决思路:在操作之前锁定要操作的数据,一旦发生变化,终止当前操作。
具体做法:对目标key 通过添加watch监视,这样在提交事务的时候如果发现key的值被修改了,就不会执行事务。如,最初watch的示例一般。
再注意下:
关系型数据库执行的锁为悲观锁,Redis的watch命令是乐观锁。如果不想要watch监听了,可以使用unwatch取消对所有 key 的监视。
一但执行 EXEC 开启事务的执行后,无论事务是否执行成功, WATCH 对变量的监控都将被取消。
当事务执行即使是失败后,也需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。
3、redis事务异常处理机制
在 Redis 事务中,如果命令集合中的某个命令发生了错误,Redis 的行为取决于错误的类型。Redis 事务并没有提供像关系型数据库那样的回滚机制。这意味着一旦 EXEC
被调用,所有排队的命令都会被执行,即使其中一些命令失败了。
Redis 事务中的“失败”有两种情况:
(1)、语法错误(命令解析错误)
这类错误发生在命令被加入到事务队列时(即在 MULTI 和 EXEC 之间)。如果命令存在语法错误或使用了不存在的命令,Redis 会立即返回错误信息,并且不会将其加入队列。如下:
此时你可以选择取消事务(通过 DISCARD),或继续添加其他命令,最终执行时只会执行语法正确的命令。
(2)、运行时错误(命令执行错误)
这类错误发生在 EXEC 执行期间。当 Redis 执行事务中的命令时,如果某个命令由于某些原因无法完成(例如试图对非整数键进行递增操作),该命令会失败,但事务中的其余命令仍然会继续执行。
Redis 会为每个命令保留执行结果,包括失败命令的结果(通常是一个错误信息)。
因此,EXEC的返回值是一个数组,其中包含了每个命令的执行结果,可以用来检查哪些命令成功了,哪些命令失败了。
学海无涯苦作舟!!!
相关文章:
Redis篇-3--原理篇2--Redis事务
1、概述 Redis 提供了简单的事务机制,Redis 事务的本质是一组命令的集合。当执行redis事务时,即一次性按照添加顺序依次执行这些命令,中间不会被打断或者干扰。 Redis 的事务机制并不像关系型数据库中的事务那样提供完整的ACID特性…...
GEE:CCDC 分类组件,对每个分段进行分类
作者:CSDN @ _养乐多_ 连续变化检测与分类(Continuous Change Detection and Classification, CCDC) 利用了时间序列拟合来对影像中的像素值随时间的变化趋势建模。每一段模型代表一个时间段内的地表覆盖类型和状态。 本文将解释如何在谷歌地球引擎(Google Earth Engine,…...
常见排序算法总结 (四) - 快速排序与随机选择
快速排序 算法思想 每一轮在数组相应的范围上随机找一个元素进行划分,将不大于它的所有元素都放到左边,将大于它的元素都放到右边。在左右两个子数组上不断地递归,直到整个数组上有序。 注意:实现时选择的时参考荷兰国旗问题优化…...
[创业之路-187]:《华为战略管理法-DSTE实战体系》-1-从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机
目录 一、UTStarcom(UT斯达康)的发展历程 1、创立与初期发展 2、快速成长与上市 3、技术创新与业务拓展 4、战略调整与持续发展 二、从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机 1、企业初期发展的顺利表现 2、顺…...
C缺陷与陷阱 — 3 深入理解表达式
目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,ÿ…...
Next.js 系统性教学:中间件与国际化功能深入剖析
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 一、Next.js 中间件 (Middleware) 功能解析 1.1 什么是中间件? 1.2 Next.js 中间件的工作机制 1.3 中间件的功能应用 身份验证与授权 请求重定向 修改请…...
openWebUI+ollamawindows+不用docker+webLite本地安装
openWebUI & ollama & windows & 不用docker & webLite 本地安装 总结一下安装教程 10核CPU16G内存 两个web框架都可以,先说简单的 ollama-webui-lite(https://github.com/ollama-webui/ollama-webui-lite) 轻量级,只使用nodejs 先装…...
动态规划——机器分配、01背包问题
一、机器分配 题目名称:机器分配 题目描述: 总公司拥有高效设备M台,准备分给下属的N个分公司。 各分公司若获得这些设备,可以为国家提供一定的盈利。 问:如何分配这M台设备才能使国家得到的盈利最大?求出最…...
leetcode——哈希表1
242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词 。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat", t "car" 输出: false 提示: 1 < s.le…...
STM32+模拟或硬件IIC+SHT20驱动问题:接上拉电阻、BUSY死锁?
主要问题: 1,使用STM32F103C8T6,模拟IIC,SCL和SDA口配置为推挽输出上拉,主要是SDA脚,每次都要输出输入模式重新配置,虽然也能通信,但不稳定,出错率大; 2&…...
Android四大组件——Activity(二)
一、Activity之间传递消息 在(一)中,我们把数据作为独立的键值对进行传递,那么现在把多条数据打包成一个对象进行传递: 1.假设有一个User类的对象,我们先使用putExtra进行传递 activity_demo06.xml <…...
PHP实现华为OBS存储
一:华为OBS存储文档地址 官方文档:https://support.huaweicloud.com/obs/index.html github地址:https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二:安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…...
SQL连续登录问题(详细案例分析)
如果要统计用户活跃度,那就涉及连续登录问题,接下来将举一个简单的例子来详细说明这个问题: 一、创建一些模拟数据 一些测试数据如下: deviceid1,2022-10-26,2022-10-26,2022-11-01 deviceid1,2022-10-26,2022-11-03,2022-11-0…...
OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数,它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…...
【一本通】农场派对
【一本通】农场派对 💐The Begin💐点点关注,收藏不迷路💐 N头牛要去参加一场在编号为x(1≤x≤n)的牛的农场举行的派对(1≤N≤1000),有M(1≤m≤100000)条有向道路,每条路长ti(1≤ti≤100);每头牛…...
uniapp中父组件传参到子组件页面渲染不生效问题处理实战记录
上篇文件介绍了,父组件数据更新正常但是页面渲染不生效的问题,详情可以看下:uniapp中父组件数组更新后与页面渲染数组不一致实战记录 本文在此基础上由于新增需求衍生出新的问题.本文只记录一下解决思路. 下面说下新增需求方便理解场景: 商品信息设置中添加抽奖概率设置…...
基础暴力算法
线性枚举 线性枚举(Linear Enumeration)是一种暴力枚举的方法,它逐一检查每个可能的解,适用于搜索和枚举问题。 其核心思路是:对问题的所有可能情况逐一进行遍历,并针对每种情况判断是否满足条件…...
【复变函数】三、复变函数的积分
目录 1. 复变函数积分1.1. 复积分1.2. 存在性与计算1.2.1 第二类曲线积分与格林公式1.2.2 第一类曲线积分与参数式 1.3. 性质1.4. 圆径积分 2. 柯西积分定理2.1. 柯西(Cauchy)基本定理与莫雷拉(Morrera)定理2.2. 复合闭路定理2.3.…...
ChatGPT Pro是什么
ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格:20美元/月。 • 目标用户:针对个人用户设计。 • 主要特点: • 在高峰期响应速度更快。 • 使用高级模型(如 GPT-4…...
React - echarts 世界地图,中国地图绘制
中国地图 首先需要一个包含中国所有省份名称的 json,这个好多网站都能找到。 我传到资源里了,放百度网盘怕太长时间不登录给我删掉了。 中国地图中文版json 我把地图抽出来单独做成了组件,这样用的时候比较方便. 使用的时候: …...
knife4j-openapi3 4.5 最基本的使用 openAPI
最基本的使用,配置太多懒得研究 SpringBoot 整合 knfe4j ,使用 OpenAPI3 规范,这个兄弟写的挺好 环境: spring-boot-starter-parent:3.4.0 1. 依赖 <dependency><groupId>com.github.xiaoymin</gr…...
如何在 Ubuntu 22.04 上安装和使用 Apache Kafka
简介 Apache Kafka是一个高性能、低延迟的分布式流处理平台,广泛用于构建实时数据管道和流式应用。本文将指导你如何在Ubuntu 22.04系统上快速部署Apache Kafka,让你体验到Kafka在处理大规模实时数据流方面的强大能力。通过本教程,你将学会如…...
Linux:network:添加ip的时候自动添加一个本地路由
文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...
Android 10、11、12存储适配相关
AndroidQ(10)分区存储完美适配 - 简书前言 最近时间在做AndroidQ的适配,截止到今天AndroidQ分区存储适配完成,期间出现很多坑,目前网上的帖子大部分都是概述变更内容,接下来的几篇帖子都是对分区存储实际...https://www.jianshu.c…...
如何将视频转化为音频?五个方法策略
在日常生活中,我们经常需要将视频中的音频提取出来,以便在特定的场合使用。无论是为了制作铃声、背景音乐,还是为了进行语音转文字处理,视频转音频的需求都非常普遍。如何将视频转化为音频?本文将详细介绍多种将视频转…...
ecovadis评估最新标准
EcoVadis评估的最新标准主要包括奖牌评估规则和新增的徽章规则,以下是对这两方面的详细阐述: 一、奖牌评估规则 评估范围:EcoVadis的评估总分为100分,评估内容涵盖环境、劳工与人权、商业道德、可持续采购等四大主题。 奖牌等级…...
Java版-图论-最小生成树-Kruskal算法
实现描述 为了造出一棵最小生成树,我们从最小边权的边开始,按边权从小到大依次加入,如果某次加边产生了环,就扔掉这条边,直到加入了 n-1 条边,即形成了一棵树。 实现代码 首选我们对所有的边,…...
【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]
目录 参考资料: 利用 Boot 选择不同的启动方式: 单片机的存储结构(主 FLASH/系统存储器/嵌入式 SRAM): 1. Cortex-M 内核芯片——启动原理: 1.1. 启动流程: 1.2. 根据单片机的存储器映射和架构图:启动…...
实验15 验证LSTM模型的长程依赖
本次实验依托上个实验 一 模型构建 创建LSTM模型,里面包括初始化init函数、初始化权重函数_init_weights、初始化状态函数init_state、前向传播函数forward。 init函数:虽然每个时间的输入和隐层都是一样的,但是他们会有四组不同的权重&am…...
Charles功能说明
1.扫把(clear the current Session) (前头方向) 作用:清除所有抓取的包(正方形框) 2.中心圈-未启用显示(Star Recording)点击启动 -启动之后显示(Stop Recording)点击停止 作用:启动之后开始抓取包(刷新一次页面或跳转抓取内容) 3.锁-未启动显示(Star SSL Proxying)点击启动 -启…...
自动秒收录程序与自动秒收录网站源码论坛版本下载
自动秒收录程序与自动秒收录网站源码论坛版本下载 随着互联网的快速发展,网站优化已成为众多企业和个人博主提升在线影响力的关键手段。其中,SEO(搜索引擎优化)作为提升网站排名的核心策略,备受关注。而SEO优化的一个…...
HTML颜色-HTML脚本
HTML脚本 js使得HTML页面具有更强的动态和交互性 HTML<script>标签 标签用于定义客户端脚本,比如javascript 可包含脚本语句,也可以通过src属性指向外部的脚本文件 JavaScript最常用于图片操作,表单验证以及动态的内容更新 HTML<n…...
【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容
目录 1. Introduction:介绍 Registry 的作用和功能。2. Registry Contents:详细描述 Registry 的结构和内容,包括各个部分的条目类型。2.1. DIMSPEC ENTRIES(维度规格条目)2.2. STATE ENTRIES(状态变量条目…...
使用Kimi开发自己的问答应用
概述 Kimi是大家常用的一个人工智能助手,本文使用Kimi开发文档,以node作为后端,开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手,擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...
Vue前端开发-路由其他配置
在路由文件中,除了跳转配置外,还可以进行路径重定向配置,如果没有找到对应的地址,还可以实现404的配置,同时,如果某个页面需要权限登录,还可以进行路由守卫配置,接下来,分…...
AI与遥感的融合:构建新一代智能监测作业平台
在测绘地理信息与遥感领域,人工智能(AI)技术的融合正推动着一场监测作业模式的革命。AI不仅提升了数据处理的效率,还极大地扩展了遥感技术的应用范围和深度。 遥感监测的智能化趋势 随着遥感数据量的激增,传统的人工…...
3D 视觉定位技术:汽车零部件制造的智能变革引擎
在汽车零部件制造领域,传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求,促使企业寻求突破之道。而 3D 视觉定位技术,为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…...
git提交时出现merge branch main of xxx
git提交时出现merge branch main of xxx 原因: 1、同事commit了一个修改A,push到remote 2、我把这个修改直接pull了下来(pull是fetchmerge的操作,自动合并到本地workspace) 3、同事因为后续的commit有冲突,…...
重生之我在异世界学编程之C语言:深入结构体篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…...
到达率和服务率在python中实现
到达率和服务率在python中实现 概念理解 到达率(Arrival Rate):是指顾客(或任务、事件等)到达服务系统的平均速率,通常用单位时间内到达的数量来表示。例如,在一个客服中心,每小时平均有10个客户来电咨询,这里的每小时10个客户就是到达率。服务率(Service Rate):是…...
重视猫艾滋:宠物健康的隐秘挑战
猫艾滋,全称为猫获得性免疫缺陷综合征(Feline Acquired Immunodeficiency Syndrome),是由猫免疫缺陷病毒(FIV)感染引起的一种严重危害猫类健康的疾病。虽然其名称与人类艾滋病相似,但猫艾滋仅在…...
使用长轮询解决某些场景的实时消息推送需求
需求来源 最近做一个需求实现在移动端通过按钮,远程控制大屏幕上展示的资源进行实时切换,可以展示一个大屏页面,可以展示一段视频,也可以展示一张图片。 解决思路 大屏幕上打开一个游览器,访问指定动态资源展示页面…...
uniapp-内部项目使用文档
uniapp-内部项目使用文档 目录 uniapp-内部项目使用文档阶段1自行实现内容:阶段1问题记录: 阶段2自行实现内容: 阶段3 APP项目介绍及规范阶段4 公共组件方法UseList 列表页面HooksListItem 列表项uni-load-more 列表加载更多组件CardTitle 列…...
linux搭建NFS服务和autofs自动挂载NFS
文章目录 1、nfs服务1、nfs原理2、RPC和NFS通讯原理3、RPC和NFS流程4、NFS工作流程5、服务端搭建6、客户端搭建7、autofs自动挂载 1、nfs服务 1、nfs原理 是一个NAS的存储,通过网络来进行文件的共享,表现出来的形式就是一个文件夹 可以支持多个linux挂…...
springboot415社区网格化管理平台的构建-(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
ubuntu下open-webui + ollama本地大模型部署
文章目录 nvidia gpu驱动安装 安装卸载 ollama 部署 添加docker秘钥docker配置添加国内镜像源ollama安装 从源拉取ollama镜像。启动一个ollama容器 通过ollama下载模型到本地检验本地模型 open-webui 部署 安装容器和镜像下载webui使用查看模型运行时内存、cpu、gpu占用 业余…...
自动化运维-配置Mysql、emqx、redis、nginx等通用性Linux日志分割工具 - logrotate
前言:logrotate 是一个在 Linux 系统中用于管理和轮转日志文件的工具。它的主要目的是帮助系统管理员自动执行日志文件的轮转、压缩、删除和邮件通知等任务,以防止日志文件占用过多的磁盘空间,同时保持日志文件的可管理性。 参考命令&#x…...
71、docker镜像制作上传/下载到阿里云
基本思想:简单学习一下如何制作镜像和上传下载到私有阿里云,然后构建一个gpu的训练/推理环境,以备后续使用 一、配置环境 ubuntu@ubuntu:~$ sudo apt-get install docker.ioubuntu@ubuntu:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS P…...
力扣--LCR 178.训练计划VI
题目 教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1: 输入:actions [5, 7, 5, 5] 输出&#…...
独孤思维:又有一个副业项目降价了
不要过早量出底牌,不然会变得低贱且廉价。 昨天在一个群里,看到有个博主,没有成交订单。 她把和用户的聊天对话发出来,我们大致看了下。 发现人家是有意向付费的。 但是这个博主过于心急,说今天加入可以优惠&#…...