redis--事务
redis事务
在Redis中,事务是一组原子性操作的集合,它们被一起执行,要么全部执行成功,要么全部回滚。虽然Redis的事务并不遵循传统数据库的ACID特性,但它仍然提供了一种将多个命令打包成一组执行的机制,适用于需要保持一系列操作的一致性的场景。
常见命令
| 命令 | 描述 |
|---|---|
| MULTI | 开启一个事务,标记事务块的开始 |
| EXEC | 执行事务中的所有命令,并将结果返回 |
| DISCARD | 取消当前事务,放弃事务中的所有命令 |
| WATCH | 监视一个或多个键,如果在事务执行前键被修改,事务将被中断 |
| UNWATCH | 取消对所有键的监视 |
| QUEUED | 在事务块中的每个命令执行后返回的标识 |
事务流程
开始事务:使用MULTI命令标记一个事务块的开始。
命令入队:在MULTI之后,所有的命令都不会立即执行,而是被放入一个队列中,每个命令都会返回一个QUEUED的响应。
执行事务:使用EXEC命令触发事务,一并执行事务中的所有命令,并返回一个数组作为结果。如果事务中有语法错误或者类型错误的命令,那么EXEC会返回一个错误,并且不执行任何命令。如果事务中有运行时错误的命令,那么EXEC会跳过这些错误命令,继续执行其他正常的命令。
事务冲突
在Redis中,事务冲突通常指的是在执行事务过程中,多个客户端对相同的键进行修改,从而引发数据不一致的情况。这种情况可能导致事务的结果与预期不符,因为不同客户端可能会在事务中同时修改相同的数据,而事务并不具备真正的隔离性和锁机制,所以可能导致数据冲突。
举个例子,假设有两个客户端在并发地进行购买商品的操作,每个客户端都会从库存中减少相应数量的商品。如果两个客户端同时在事务中减少库存,那么可能会出现如下冲突:
- 客户端A读取库存为10,开始执行事务。
- 客户端B同时读取库存也为10,开始执行事务。
- 客户端A将库存减少3,变成7。
- 客户端B将库存减少2,变成8。
在这种情况下,两个客户端的事务冲突,导致库存的最终结果不是预期的。这就是事务冲突引发的问题,可能导致数据不一致性。
为了避免事务冲突,Redis提供了WATCH命令,可以在事务执行前监视一个或多个键,如果在事务执行前有其他客户端对这些键进行了修改,事务会被中断,这样可以减少事务冲突的可能性。但是需要注意,WATCH并不能完全解决事务冲突问题,因为仍然可能在EXEC执行时发生冲突。
乐观锁和悲观锁
乐观锁
乐观锁是一种较为轻量级的并发控制机制,它假定在大多数情况下,事务之间不会发生冲突。在 Redis 中,乐观锁通常通过使用版本号或时间戳来实现。当一个客户端想要修改一个键的值时,它会先获取当前键的版本号或时间戳,然后在修改完成后再次检查版本号或时间戳是否仍然一致。如果一致,说明期间没有其他客户端修改过该键的值,操作可以被提交。如果不一致,说明期间有其他客户端修改了该键的值,操作可能会失败或需要重试。
优点:
- 适用于多读少写的场景,因为大部分时间数据冲突较少。
- 不需要长时间的锁定,提高了系统的并发性能。
缺点:
- 当冲突发生时,需要重试操作,可能会增加系统开销。
- 无法解决高并发下的复杂冲突。
悲观锁
悲观锁是一种相对较重的并发控制机制,它假定事务之间可能会发生冲突,因此在访问数据之前会对数据进行锁定,以防止其他事务对其进行修改。在 Redis 中,悲观锁通常使用 WATCH 命令来实现,它可以监视一个或多个键,如果在事务执行期间这些键的值发生了变化,事务将被回滚。
优点:
- 可以确保数据的一致性,适用于复杂的事务场景。
- 避免了操作冲突,无需重试。
缺点:
- 长时间的锁定可能降低系统的并发性能。
- 需要耗费更多的系统资源。
乐观锁和悲观锁的对比:
-
性能开销: 乐观锁的性能开销较低,因为它不会长时间地锁定数据,而是在操作时检查冲突。悲观锁在锁定数据的同时,会对系统的并发性能产生一定的影响。
-
适用场景: 乐观锁适用于多读少写的场景,因为它假定冲突较少。悲观锁适用于复杂的事务场景,需要确保数据的一致性。
-
冲突处理: 乐观锁在发生冲突时需要进行重试操作,而悲观锁可以避免操作冲突,但可能会造成长时间的等待。
-
并发性能: 乐观锁可以提高系统的并发性能,因为它不会长时间锁定数据。悲观锁可能会降低系统的并发性能,因为它需要长
相关文章:
redis--事务
redis事务 在Redis中,事务是一组原子性操作的集合,它们被一起执行,要么全部执行成功,要么全部回滚。虽然Redis的事务并不遵循传统数据库的ACID特性,但它仍然提供了一种将多个命令打包成一组执行的机制,适用…...
111. 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeN…...
SpringMVC归纳与总结
前言 Spring的核心是IOC,一种依赖反转的解耦思想。MVC是一种处理Web请求的架构模式,当两者的作用结合,就形成了SpringMVC。 组成及运行原理 1. 两次映射 2. 为什么用适配器模式 过滤器与拦截器 1. 范围 静态资源与动态资源2. 生命周期…...
Python学习笔记_进阶篇(三)_django知识(二)
本章内容 Django model Model 基础配置 django默认支持sqlite,mysql, oracle,postgresql数据库。 <1> sqlite django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 引擎名称:django.db.backends.sqlite3 <2>mysql …...
RISC-V 整型通用寄存器介绍
简介 RISC-V64位/32位提供了32个整型通用寄存器,编号是x0~x31,这些整型通用寄存器的宽度与架构位数一致。 浮点数寄存器与整形寄存器一样也提供了32个:f0~f31,位数与架构位数一致。 通用寄存器介绍 零寄存器 x0/zero x0寄存…...
学习Vue:【性能优化】异步组件和懒加载
在Vue.js应用开发中,性能优化是一个至关重要的主题,而异步组件和懒加载是提升性能的有效方法之一。本文将介绍什么是异步组件和懒加载,以及如何在Vue.js中应用这些技术来提升应用性能。 异步组件和懒加载 异步组件 异步组件是指在需要的时候…...
pdf格式文件下载不预览,云存储的跨域解决
需求背景 后端接口中返回的是pdf文件路径比如: pdf文件路径 (https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf) 前端适配是这样的 <ahref"https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&…...
httplib + nlohmann::json上传数据时中文乱码解决
1、nlohmann::json 1.1 编码格式使用UTF-8 参考 nlohmann::json 中文乱码解决方案 (1)将数据先转为UTF-8格式 2、httplib 2.1 上传数据前 (1)调用httplib::Response对象的set_header()方法来设置编码格式 httplib::Response res…...
JavaScript中的设计模式之一--单例模式和模块
虽然有一种疯狂天才的感觉可能很诱人,但重新发明轮子通常不是设计软件的最佳方法。很有可能有人已经遇到了和你一样的问题,并以一种聪明的方式解决了它。这样的最佳实践在形式化后被称为设计模式。今天我们来看看它们的概念,并检查单例模式和…...
回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测(多指标,多图)效果一览基本介绍程序设计参考资料 效果一览 基本…...
css学习4(背景)
1、CSS中,颜色值通常以以下方式定义: 十六进制 - 如:"#ff0000"RGB - 如:"rgb(255,0,0)"颜色名称 - 如:"red" 2、background-image 属性描述了元素的背景图像. 默认情况下,背景图像进…...
二、SQL,如何实现表的创建和查询
1、新建表格(在当前数据库中新建一个表格): (1)基础语法: create table [表名]( [字段:列标签] [该列数据类型] comment [字段注释], [字段:列标签] [该列数据类型] comment [字段注释], ……,…...
大数据及软件教学与实验专业实训室建设方案
一 、系统概述 大数据及软件教学与实验大数据及软件教学与实验在现代教育中扮演重要角色,这方面的教学内容涵盖了大数据处理、数据分析、数据可视化和大数据应用等多个方面。以下是大数据及软件教学与实验的一般内容:1. 数据基础知识:教授学生…...
信创办公–基于WPS的EXCEL最佳实践系列 (公式和函数)
信创办公–基于WPS的EXCEL最佳实践系列 (公式和函数) 目录 应用背景相关知识操作步骤1、认识基本的初级函数2、相对引用,绝对引用,混合引用3、统计函数4、文本函数 应用背景 熟练掌握Excel的函数工具能让我们在日常的使用中更加方…...
【Apollo】自动驾驶感知——毫米波雷达
作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖…...
SpringBoot部署到腾讯云
SpringBoot部署到腾讯云 此处默认已经申请到腾讯云服务器,因为本人还没有申请域名,所以就直接使用的ip地址 XShell连接到腾讯云 主机中填写腾讯云的公网ip地址 公网ip地址在下图中找到 接下来填写服务器的用户名与密码 一般centOS用户名为rootÿ…...
Git 设置代理
Git 传输分两种协议,SSH和 http(s),设置代理也需要分两种。 http(s) 代理 Command Line 使用 命令行 模式,可以在Powershell中使用以下命令设置代理: $env:http_proxy"http://127.0.0.1:7890" $env:https_proxy&quo…...
基于Spring Boot的机场VIP客户管理系统的设计与实现(Java+spring boot+MySQL)
获取源码或者论文请私信博主 演示视频: 基于Spring Boot的机场VIP客户管理系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java s…...
图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009
首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性...
恒运资本:算力概念强势拉升,亚康股份“20cm”涨停,首都在线等大涨
算力概念21日盘中强势拉升,到发稿,亚康股份“20cm”涨停,首都在线、汇金股份涨逾11%,鸿博股份亦涨停,南凌科技涨近9%,科创信息、神州数码、铜牛信息等涨超7%。 音讯面上,8月19日,202…...
从芯片拆解看移动通信产业演进:基带、射频与SoC集成趋势
1. 拆解背后的逻辑:为什么我们要关注十年前的芯片趋势?每次看到工程师朋友对着一块新出的手机主板两眼放光,拿着热风枪和撬片跃跃欲试时,我都能理解那种心情。硬件拆解,尤其是对手机、平板这类消费电子产品的深度拆解&…...
RAGday13-day15
Day13:RAG 常见问题 & 调优实战检索不到内容原因:分块太小、关键词太偏、没做混合检索解决:换递归 / 父子分块、加上 ES 混合检索、做 Query 改写搜到内容多但答不对原因:检索杂、没重排、没上下文压缩解决:加 Rer…...
基于Next.js 15与React 19构建现代化个人作品集:技术选型与工程实践
1. 项目概述:为什么选择 Next.js 15 构建现代个人作品集 作为一名在前后端领域摸爬滚打了十多年的开发者,我见过也亲手搭建过无数种个人作品集网站。从早期的纯静态 HTML/CSS,到 jQuery 时代,再到 React/Vue 等框架的兴起&#x…...
FreeVA:零训练成本,用图像大模型实现视频理解的新范式
1. 项目概述:一个无需训练的“零成本”视频助手 最近在折腾多模态大模型(MLLM)的时候,我发现了一个挺有意思的现象:大家一提到让模型理解视频,第一反应就是得搞“视频指令微调”。简单说,就是拿…...
基于 4SAPI 的 API 网关智能监控与故障诊断系统:MTTR 降低 90%,系统可用性提升至 99.99%
前言 在微服务架构盛行的今天,API 网关已经成为企业系统的核心入口,承担着流量路由、负载均衡、认证授权、限流熔断等关键功能。API 网关的稳定性直接决定了整个系统的可用性。但传统的 API 网关监控模式已经难以满足现代企业的需求: 告警风…...
WarcraftHelper魔兽争霸III优化工具:让你的经典游戏重获新生
WarcraftHelper魔兽争霸III优化工具:让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为《魔兽争霸III》…...
Dell G15终极散热管理:开源热控中心完全指南 [特殊字符]
Dell G15终极散热管理:开源热控中心完全指南 🚀 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15游戏本的过热问题而烦恼…...
第六届机械制造与智能控制国际学术会议(ICMMIC 2026)
第六届机械制造与智能控制国际学术会议(ICMMIC 2026)将于2026年6月12-14日在中国浙江湖州隆重举行。本次会议旨在汇聚全球“机械制造、智能控制”领域的学者、专家、研发者和技术人员,共同探讨学术前沿,分享科研成果,促…...
告别答辩PPT焦虑:百考通AI如何智能化解你的毕业展示难题
当你终于为论文画上最后一个句号,准备迎接毕业的曙光时,答辩PPT的制作却往往成为压垮学生的最后一根稻草。面对这份看似简单却暗藏玄机的任务,百考通AI为你提供智能解决方案。 深夜,当你的论文最后一个字终于落定,一种…...
CPT Markets:国际监管框架下的稳健运营
在评估金融服务平台时,监管合规、技术能力、客户服务等维度构成了重要的观察方向。CPT Markets作为业内较为活跃的服务机构,其在这些方面的实践具有一定的参考价值。本文将围绕评测视角,对其综合表现进行系统性的呈现,希望为读者提…...
