当前位置: 首页 > news >正文

redis事务和锁机制

目录

事务定义

 事务操作命令

 redis事务的错误处理

 redis事务冲突问题

        redis解决事务冲突的方法

Redis事务的三个特性


事务定义

        redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行。事务中在执行过程中,不会被其他客户端发送过来的请求命令打断。

       redis事务的主要作用就是串联多个命令,防止别的命令插队。

        redis事务实现操作顺序的执行,是通过队列的实现的。

 事务操作命令

        事务操作的基本命令是:Multi,Exec,discard。

        从输入Multi命令开始,输入的命令都会依次进入到命令队列中,但是不会执行,直到输入Exec后,Redis将命令队列中的命令依次执行。

        组队过程中可以通过discard来放弃组队。

         案例:

 redis事务的错误处理

  • 在组队过程中,某个命令出现了报错,在执行时,队列的所有命令都不会执行。

  • 在组队过程中,都是正确的,但是,在执行时某个命令出现了错误,那只有错误命令不会被执行,其他正确的命令都会执行。

 redis事务冲突问题

        什么是冲突?以及为什么要解决冲突?

        模拟抢票的场景。当只有一张票时,此时,三个人看到同一张票,同时抢。在代码中表现为,三个线程同时从redis中获取票数,此时会有冲突,如果不解决冲突,三个线程取到票的数量都为1,都可以买到票,但是实际只有一张票。此时就会有问题。

        redis解决事务冲突的方法

  • 悲观锁

        顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。这样别人拿数据的时候就会阻塞直到拿到锁。传统的关系型数据库中就用到了很多这样的锁机制。比如:行锁,表锁等,读锁,写锁等,都是在操作前上锁。

        这种锁的缺点会导致效率变低。

比如上面买票的例子,三个人买一张票。第一个人买时,就会上锁,第二个和第三个人买不了,直到第一个人买完。

  • 乐观锁

        顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁。但是在每次拿数据时会判断一下有没有人去更新这个数据,可以使用版本号等机制。

        乐观锁适用于多读的应用类型,这样可以提高吞吐量。redis就是利用这种check-and-set机制实现事务的。

比如上面买票的例子,三个人同时抢到这一张票,此时版本号为v1,但是第一个人实际抢到了这张票,在设置票数时,将数据库中票数量的版本号设为v1.1,第二个人修改票数量时,比较版本号,此时版本号不相同,不会进行操作,需要获得新数据才可以进行操作。

  • 监视WATCH

        在执行multi之前,先执行watch key1 key2...;可以监视一个或者多个key,如果在事务执行前这些key被其他命令改动,那么事务会被打断。

  •  取消监视unwatch

        取消watch命令对所有key的监视。

        如果在执行watch命令之后,exec命令或者discard命令先执行的话,就不需要再执行unwatch了。

Redis事务的三个特性

  • 单独的隔离操作

        事务中所有的命令都会序列化,按照顺序的执行,事务在执行过程中,不会被其他客户端发送来的命令请求打断。

  • 没有隔离级别的概念

        事务队列中的命令没有提交之前都不会实际执行。

  • 不保证原子性

        事务执行过程中如果有一条命令执行失败,其他命令仍然会被执行,不会回滚。

相关文章:

redis事务和锁机制

目录 事务定义 事务操作命令 redis事务的错误处理 redis事务冲突问题 redis解决事务冲突的方法 Redis事务的三个特性 事务定义 redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行。事务中在执行过程中,不会被其他客户…...

Java实例——线程

1、查看线程存活状态 Thread.isAlive() Thread.getName() public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 10; i) {printMsg();}}public static void printMsg(){Thread thread Thread.currentThread();//Thread.getName() 获取线程…...

云计算学习课程——越来越重要的云安全

2023&#xff0c;越来越多的企业和组织正在或即将把核心系统和数据迁移上云端&#xff0c;其中以公有云和服务居多&#xff0c;那么就意味着在数据迁移的过程中会出现安全问题的几率更大。企业也越来越注重云安全体系&#xff0c;对我们云计算运维工程师来说&#xff0c;也是一…...

Android 高性能列表:RecyclerView + DiffUtil

文章目录背景介绍一般刷新 notifyDataSetChanged()局部刷新实现调用代码准备工作创建 MyDiffUtilCallback 类继承 DiffUtil.Callback 抽象类MyAdpter 类代码实现步骤总结通过 log 证实 diffutil 的局部刷新diffutil 优化后台线程参考主线程参考diff 更新优化后写法相关参考背景…...

为什么派生类的构造函数必须在初始化列表中调用基类的构造函数

调用派生类的构造函数时&#xff0c;可能会调用继承自基类的函数&#xff0c;也就可能会用到基类的数据成员&#xff0c;因此&#xff0c;调用派生类的构造函数时&#xff0c;必须确保继承自基类的数据成员已构造完毕&#xff0c;而将基类构造函数的调用写在初始化列表中&#…...

2023年2月初某企业网络工程师面试题【建议收藏】

拓扑图如下&#xff0c;主机A与主机B能互相通信&#xff0c;但是A不能ping通RA的F0接口&#xff0c;这是为什么&#xff1f;RA上f0接口上配置了ACL&#xff0c;禁止源ip为主机A&#xff0c;目的ip为RA f0的数据包的发送&#xff1b; 第一个路由器上只有到主机B网段的路由&#…...

分布式下(sso)单点登录

目录标题一、基于rediscookie的单点登录二、基于jwtcookie的单点登录一、基于rediscookie的单点登录 传统单机应用登录 传统单机应用&#xff0c;一般是结合session和cookie实现认证、授权。用户通过输入账号密码登录系统&#xff0c;登录成功后在系统创建一个session来保存用…...

PMP真的有那么厉害?你需要考PMP吗?

这个含金量是有的&#xff0c;是目前项目管理界含金量较高的证书&#xff0c;但也要分人&#xff0c; 因为这是职业证书&#xff0c;主要用于提高职场工作能力&#xff0c;不搞这一行的&#xff0c;PMP证书含金量再高也是一张废纸&#xff0c;可以看下下面这张图&#xff0c;这…...

高通平台开发系列讲解(WIFI篇)802.11 基本概念

文章目录 一、WLAN概述二、802.11发展历程三、802.11基本概念沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将基于高通平台介绍802.11基本概念。 一、WLAN概述 WLAN是Wireless Local Area Network的简称,指应用无线通信技术将计算机设备互联起来,构成可以互相通…...

扬帆优配|反弹涨超70%,昨收三连板,稀土行业或迎大事件

本年第一批稀土挖掘锻炼目标行将发放。 2月22日晚&#xff0c;东易日盛公告称&#xff0c;公司收到董事、副总经理兼财务总监李双侠出具的《关于未严格执行股份减持方案的致歉函》&#xff0c;其此次减持方案已施行结束&#xff0c;但在施行减持方案时&#xff0c;因操作失误&a…...

华为OD机试 - 工号不够用了(Java) | 机试题+算法思路+考点+代码解析 【2023】

工号不够用了 3020年,空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。 现在,请你负责调研新工号系统。继承历史传统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。新工号由一段英文字母开头,之后跟随一段数字,比如"aaahw0001&qu…...

Python学习-----lambda式匿名函数

目录 前言&#xff1a; 1.什么是lambda函数 2.使用示例 &#xff08;1&#xff09;示例1&#xff1a;与def对比 &#xff08;2&#xff09;示例2&#xff1a;与三目运算符 &#xff08;3&#xff09;示例3&#xff1a;lambda作为参数传入其他函数 &#xff08;4&#xff…...

华为OD机试真题Python实现【求解连续数列】真题+解题思路+代码(20222023)

求解连续数列 题目 已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 ## 输入 输入包含两个参数 连续正整数数…...

每日学术速递2.22

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.PriSTI: A Conditional Diffusion Framework for Spatiotemporal Imputation 标题&#xff1a;PriSTI&#xff1a;时空插补的条件扩散框架 作者&#xff1a;Mingzhe Liu, Han Huan…...

postgresql 数据库 主从切换 测试

postgresql 数据库 主从切换 测试 文章目录postgresql 数据库 主从切换 测试前言环境&#xff1a;主从切换1. 查看数据库状态&#xff1a;2. 备库切换主库3. 旧主库切换成备库&#xff1b;4 查看状态后记前言 因数据库等保需要&#xff0c;需要对老系统的数据库进行主从切换来…...

干旱预测方法总结及基于人工神经网络的干旱预测案例分析(MATLAB全代码)

本案例采用SPEI干旱指数&#xff0c;构建ANN和BP神经网络预测模型&#xff0c;并开展1~3个月预见期的干旱预测&#xff0c;对比分析干旱预测模型的适用性&#xff0c;为流域干旱预警和管理提供技术依据。 干旱预测 1 干旱预测方法 1.1 统计学干旱预测 根据历史降水或气温等…...

一篇文章弄清楚啥是数组和集合

数组和集合多语言都有&#xff0c;数组是集合的一种&#xff0c;是一种有序的集合&#xff0c;不面向对象&#xff0c;面向过程的也有。1.数组逻辑结构&#xff1a;线性的物理结构&#xff1a;顺序的存储结构申请内存&#xff1a;一次申请一大段连续的空间&#xff0c;一旦申请…...

计算机网络(五):三次握手和四次挥手,TCP,UDP,TIME-WAIT,CLOSE-WAIT,拥塞避免,

文章目录零. TCP和UDP的区别以及TCP详解TCP是如何保证可靠性的TCP超时重传的原理TCP最大连接数限制TCP流量控制和拥塞控制流量控制拥塞控制TCP粘包问题一、三次握手和四次挥手二、为什么要进行三次握手&#xff1f;两次握手可以吗&#xff1f;三、为什么要进行四次挥手&#xf…...

【数据结构】二叉树(C语言实现)

文章目录一、树的概念及结构1.树的概念2.树的相关概念名词3.树的表示4.树在实际中的运用二、二叉树概念及结构1.二叉树的概念2.特殊的二叉树3.二叉树的性质4.二叉树的存储结构三、二叉树链式结构的实现1.结构的定义2.构建二叉树3.二叉树前序遍历4.二叉树中序遍历5.二叉树后序遍…...

高级信息系统项目管理(高项 软考)原创论文——成本管理(2)

1、如果您想了解如何高分通过高级信息系统项目管理师(高项)你可以点击链接: 高级信息系统项目管理师(高项)高分通过经验分享_高项经验 2、如果您想了解更多的高级信息系统项目管理(高项 软考)原创论文,您可以点击链接:...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...