Redis:事务

news2024/11/16 7:21:55

1. 简介

可以一次性执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串化执行,不允许被其他其他命令插入,不许加塞

即将要执行的命令放入队列中,此时该队列的所有命令就是一个事务,该队列会一次性、顺序性、排他性的执行该队列中的命令

2. Redis事务与数据库事务区别

1 单独的隔离操作
Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
2 没有隔离级别的概念
因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了
3不保证原子性
Redis的事务 不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
4 排它性
Redis会保证一个事务内的命令依次执行,而不会被其它命令插入

 3. 常用命令

3.1 正常执行

MULIT

EXEC 

 

3.2 放弃事务 

MULIT

DISCARD

DISCARD此时手动取消该事务 

 

 3.3 全体失效

由于事务内有命令语法编译错误,则该事务会全体失效,即所有命令都不执行 

3.4 部分失效

事务内部所有命令都符合语法规则,但是有些命令不符合数据类型规则,则不符合的命令将会失效(如:给邮箱号:a10086b@qq.com执行+1操作)

此时和传统关系型数据库是有区别的,传统关系型数据库的事务要么同时成功,要么同时失败,而Redsi数据库存在部分成功部分失败的可能

Redis不提供事务回滚的功能,开发者必须在事务执行出错后,自行恢复数据库状态 

 

3.5 watch监控 

Redis使用watcht提供乐观锁,类似于(check-and-set)CAS

悲观锁

 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

乐观锁

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。

 

乐观锁策略:提交版本必须   大于   记录当前版本才能执行更新

加塞篡改

watch命令是一种乐观锁的实现,Redis在修改的时候会检测数据是否被更改,如果更改了,则执行失败

第一个窗口蓝色框第5步执行结果返回为空,也就是相当于是失败

 一旦执行EXEC操作,所有监控锁都会被取消

当客户端连接丢失时(如退出连接),所有东西都会被取消监控

4. 事务三部曲

 

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

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

相关文章

接口自动化中对于文件上传的处理方法

正常的接口自动化基本都是json的格式,对于文件上传是一种特殊的格式是表单格式针对这种表单格式在接口自动化中怎么处理,主要通过工作中使用的一个实际的例子进行分享 举例:web上需要导入一个文件实现相关的功能,主要通过两个接口…

vue实现滚动条下滑时隐藏导航栏,上滑时显示导航栏

效果展示 思路 监听滚动事件,记录上次的滚动距离,与最新滚动距离做对比,如果为正,说明滚动距离距顶值scrollTop变大,用户正在向下滚动页面,此时隐藏,反之则反,隐藏就是top值给他负导…

Linux网络-netstat命令

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器,主要的作用就是向客户端提供网络…

地球磁场的形成、变迁、特点

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

Python如何统治AI世界?一文读懂它的优势与挑战

一、Python语言介绍 1.1 Python语言概述 Python是一种由Guido van Rossum于1991年首次发布的高级编程语言。其设计理念强调代码的可读性和简洁性,使其成为了许多开发者的首选语言。Python的语法简洁直观,采用了缩进来定义代码块,这与其他使…

应力对薄膜有什么影响?

知识星球里的学员问:在薄膜沉积中,应力是一个经常要监控的参数,它有什么作用?应力过大对薄膜有哪些影响? 应力是什么? 薄膜的应力是指在薄膜沉积过程中,薄膜内部或薄膜与基材之间产生的作用力。…

3Dtiles文件是否可以直接合并?

答:无法直接合并。网格大师有3dtiles转osgb的功能,先转osgb,然后把osgb放在一起之后再转3dtiles。 网格大师是一款能够解决实景三维模型空间参考、原点、瓦块大小不统一,重叠区域处理问题的工具“百宝箱”,集格式转换…

大数据:数据标准化及质量管控方案

本方案是一套全面的解决方案,旨在为企业构建科学、规范的数据管理体系,确保数据的准确性、一致性、完整性、合理性、及时性和有效性,从而支撑业务数据的高效应用与正确决策。以下是对该方案的详细介绍: 一、方案概述 本数据标准…

Redis八股文(二)

目录 21.Redis如何实现服务高可用? 22.什么是集群中的脑裂? 23.脑裂导致数据丢失怎么办? 24.Redis使用的过期删除策略是什么? 25.什么是惰性删除? 26.什么是定期删除? 27.Redis持久化时&#xff0…

超级详细的SpringSecurity

文章目录 概述与shiro对比快速入门底层原理FilterDelegatingFilterProxyFilterChainProxySecurityFilterChainMultiple SecurityFilterChain 自定义登录流程解析基于内存的用户认证实现基于数据库的用户登录 实现用户新增功能controllerservice修改配置关闭csrf攻击防御修改默认…

python拼接字符串方法

文章目录 1. 使用加号()2. 使用str.join()方法3. 使用格式化字符串(f-strings, % 操作符, .format() 方法)4. 使用列表推导式和join()结合 性能对比 在Python中,字符串拼接是将两个或多个字符串合并成一个新字符串的过…

C++初学(3)

面向对象编程(OOP)的本质是设计并拓展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。内置的C类型分为两组:基本类型和复合类型。这里我们将介绍基本类型的整数和浮点数 3.1、简单变量 3.1.1、变量名 C必须遵循几种简…

理解常见开源协议的区别

本文将介绍几种常见的开源许可证,包括GPL、LGPL、MIT、Apache、BSD 和 木兰协议(Mulan PSL),并详细解释它们的区别。 1. GPL (GNU General Public License) GPL 是最著名和最常用的开源许可证之一,由自由软件基金会 …

【前端 17】使用Axios发送异步请求

Axios 简介与使用:简化 HTTP 请求 在现代 web 开发中,发送 HTTP 请求是一项常见且核心的任务。Axios 是一个基于 Promise 的 HTTP 客户端,适用于 node.js 和浏览器,它提供了一种简单的方法来发送各种 HTTP 请求。本文将介绍 Axio…

如何在 Excel 中恢复临时文件

如果您在退出 Microsoft Excel 之前忘记保存重要的工作簿,这会令人烦恼和头疼。此外,在某些意外情况下,包括计算机突然崩溃、软件本身崩溃等,您精心制作的工作簿可能会消失。但是,您仍然可以使用Excel 临时服务恢复 Ex…

中山大学与Pixocial联手提出CatVTON:轻量化架构与高效训练,助力虚拟试衣技术落地应用!

近日,中山大学和 Pixocial 联合发布了 CatVTON,提出更加轻量化的架构与参数高效训练策略,助力图像虚拟试衣技术向落地应用迈进! 项目已公开论文并开源权重和代码,更有在线 Demo 可以试玩! 给钢铁侠穿上奇异…

Qt Creator初识

目录 一、认识 Qt Creator 1.Qt Creator 概览 2.使用 Qt Creator 新建项目 2.1 新建项目 2.2 选择项目模板 2.3 选择项目路径 2.4 选择构建系统 2.5 填写类信息设置界面 2.6 选择语言和翻译文件 2.7 选择 Qt 套件 2.8 选择版本控制系统 2.9 最终效果 3.认识 Qt Cre…

【详细】Ubuntu下安装qt5

Ubuntu下安装qt5 一. QT安装环境准备1、判断gcc是否安装2、安装g3、安装clang编译器4、安装 clang 5、安装make6、安装make-guile7、安装cmake 二. QT5安装1、安装Qt5的组件2、安装Qt的开发工具3、安装qtcreator4、安装qt55、安装qt charts(可选) 三、安…

VS2022创建C C++ GTEST工程

原因 需要对带代码进行单元测试,选择在Visual studio 中使用GTEST 框架。 实施 创建一个常规的控制台可执行程序。然后使用NUGET安装包 安装GTEST 头文件和动态库,同时安装GTEST ADAPTER。 安装可能提示找不到包源,此时需要根据提示配置一…

【克隆图】python刷题记录

R2-图 目录 DFS BFS ​ps: 图遍历即可,使用字典来记录访问过的结点。 DFS """ # Definition for a Node. class Node:def __init__(self, val 0, neighbors None):self.val valself.neighbors neighbors if neighbors is not None else []…