湖南响应式网站推荐长沙大型网站设计公司

news/2025/10/2 23:59:32/文章来源:
湖南响应式网站推荐,长沙大型网站设计公司,网站建设必知,网页制作模板html文章目录 Redis 事务1)基本认识2)事务操作1.MULTI2.EXEC3.错误处理4.DISCARD5.WATCH6.SCRIPT Redis 事务 官方文档#xff0c;永远是你学习的第一手资料#xff1a;Redis 事务 1)基本认识 谈到事务#xff0c;大家首先都会联想到 mysql 中复杂但又功能强大的“事务”… 文章目录 Redis 事务1)基本认识2)事务操作1.MULTI2.EXEC3.错误处理4.DISCARD5.WATCH6.SCRIPT Redis 事务 官方文档永远是你学习的第一手资料Redis 事务 1)基本认识 谈到事务大家首先都会联想到 mysql 中复杂但又功能强大的“事务”和 mysql 相比redis 所提供的事务简直就是个“弟弟”。我们从 mysql 事务的四大基本特点进行比较 原子性 原子性最初的含义就是把多个操作打包到一起要么全部执行要么全部不执行。但是mysql 在原子性这条道路上走的更远它要求多个操作要么全部执行成功要么全部不执行如果其中任一操作执行失败都会 rollback 确保数据的一致性。 Redis 事务可以说具有原子性也可以说没有这是一个理解角度的问题。Redis 事务确实可以将多个操作打包一起执行从这方面谈Redis 是具有原子性的但是和 mysql 不同Redis 事务并不保证所有命令执行成功由于 mysql 的标杆作用“拉高”了原子性的标准从这一方面说Redis 并不具有原子性。 早些版本的 Redis 官网中明确提出了 Redis 事务具有原子性但现在去看官网已经把第一句删掉了。看连 Redis 官方都 “怂了”所以我们还是倾向于认为 Redis 不具有原子性 那为什么 Redis 不提供和 mysql 一样强大的事务机制呢首先 mysql 为了实现事务机制付出了巨大的代价而 Redis 则是主打一个轻量简单如果和 mysql 一样就丢了自己的特色那又怎么从这么多数据库中冲杀出来呢 一致性 由于 Redis 并不提供事务回滚机制当其中某些操作失败时就会造成数据不一致的问题。例如以下这个场景张三给李四转账 1000 元。张三余额 -1000 的操作成功但是李四余额 1000 的操作失败而 redis 并不会因为操作执行失败而回滚数据从而导致数据不一致的问题发生 持久性 mysql 中又 redo log 保证事务的持久性但是 redis 事务本身并不具有持久性持久化还得依赖redis的 rdb 或者 aof 机制。但是否开启持久化是redis-server自己的决定和事务本身无关 隔离性 Redis 没有也不需要隔离性。隔离性是针对并发读写的问题而引入了而 Redis 是一个单进程的数据库不存在这方面的烦恼。 2)事务操作 1.MULTI multi 指令用于开启一个事务 127.0.0.1:6379 multi OKRedis 服务端为每一个客户端维护一个事务命令队列multi 后所有命令(除了 exec)都会被添加到队列中而不是立即执行queued 状态 127.0.0.1:6379 set key1 1 QUEUED 127.0.0.1:6379 set key1 2 QUEUED2.EXEC exec 指令用于按次序一次性执行事务队列中命令 127.0.0.1:6379 exec 1) OK 2) OK 127.0.0.1:6379 get key1 13.错误处理 在 Redis 事务中存在两种类型的错误 在调用 exec 前发生错误例如某个指令中存在语法错误。当这种错误发生时整个事务都会被直接丢弃 127.0.0.1:6379 multi OK 127.0.0.1:6379 get key1 QUEUED 127.0.0.1:6379 abc (error) ERR unknown command abc, with args beginning with: 127.0.0.1:6379 exec (error) EXECABORT Transaction discarded because of previous errors.在调用 exec 期间发生的错误。在这种情况下Redis 会继续执行剩余的命令不管某些命令是否失败。 127.0.0.1:6379 FLUSHALL OK 127.0.0.1:6379 multi OK 127.0.0.1:6379 set key1 1 QUEUED 127.0.0.1:6379 LPOP key1 QUEUED 127.0.0.1:6379 set key2 2 QUEUED 127.0.0.1:6379 get key2 QUEUED 127.0.0.1:6379 EXEC 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK 4) 2上面的案例也验证了 Redis 事务只能保证多条一起执行但并不保证所有的命令都会执行成功。失败了也不会数据回滚因而存在一致性的问题 4.DISCARD discard 指令用于终止取消当前正在执行的事务队列中的所有指令都会被直接丢弃 127.0.0.1:6379 multi OK 127.0.0.1:6379 get key1 QUEUED 127.0.0.1:6379 get key2 QUEUED 127.0.0.1:6379 discard OK 127.0.0.1:6379 exec (error) ERR EXEC without MULTI当前没有正在执行的事务则 discard 指令无效 127.0.0.1:6379 discard (error) ERR DISCARD without MULTI5.WATCH 用法 在执行事务期间某个键值被其他客户端修改了其结果就容易令人产生歧义例如下面这个场景 timeclient_1client_2t1execute command multit2execute command set key1 1……t3execute command set key1 2t4execute command exec watch 与事务配合使用它允许你监视多个 key如果在事务的执行期间任何一个键被其他客户端修改都会导致当前事务全部丢弃从而确保了事务执行期间数据的一致性。watch 的作用时间从 multi 开始到执行 exec 结束。 // client1 127.0.0.1:6379 mset key1 1 key2 2 OK 127.0.0.1:6379 watch key1 key2 OK 127.0.0.1:6379 multi OK 127.0.0.1:6379 mget key1 key2 QUEUED 127.0.0.1:6379 exec (nil) // 事务执行失败// client2在client1事务执行期间进行如下修改 127.0.0.1:6379 incr key1 (integer) 2 127.0.0.1:6379 decr key2 (integer) 1unwatch 的作用与 watch 相反它用于清除对所有 key 的 “watch”。在执行 exec 或者 client 退出时所有的 key 都会 “unwatched” 原理 watch 本质就是一把乐观锁通过CAS机制实现每个 watched 变量都有一个初始版本号修改变量会让其版本号变大在执行 exec 时会比较当前版本号与 watch 时的版本号是否一致如果不一致说明变量在事务执行期间发生了修改当前事务就会被 discard 案例 下面是官方文档提供的一个使用案例通过 watch 去创造一个新的原子操作 WATCH zset element ZRANGE zset 0 0 MULTI ZREM zset element EXEC从 zset 中删除一个元素有两部1)找到最小的元素 2) 将最小的元素删除。如果删除失败说明最小值被其他客户端修改那么我们就重复上面操作直到删除一个最小值 6.SCRIPT 任何 redis 事务能完成的操作我们都可以使用 redis script 完成。redis script 天生就有把多个指令打包执行的能力感兴趣的可以去网上找找 lua 脚本操作 redis 的教程

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

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

相关文章

网站开发培训周末班网站模仿算侵权吗

文章目录一、环境分布1. 版本声明2. 依赖2. case测试2. case2测试一、环境分布 1. 版本声明 linux服务器软件版本jdk1.8kafkakafka_2.13-2.4.0注:建议版本和应用依赖的客户端版本依赖保持一致,如果需要更高版本,可以尝试 但是有一点&#x…

从网站栏目看网站功能兰州seo整站优化服务商

SVN 1、SVN和Git的区别 SVN是集中式的,也就是会有一个服务器保存所有代码,拉取代码的时候只能从这个服务器上拉取;Git是分布式的,也就是说每个人都保存有所有代码,如果要获取代码,可以从其他人手上获取SV…

开个网站多少钱一年学校网站源码

heap【堆】掌握 手写上浮、下沉、建堆函数 对一组数进行堆排序 直接使用接口函数heapq 什么是堆???堆是一个二叉树。也就是有两个叉。下面是一个大根堆: 大根堆的每一个根节点比他的子节点都大 有大根堆就有小根堆&#xff1…

go mod 面试题

go mod 有哪些命令都有什么作用 Go Mod 常用命令及功能一览 go mod 是 Go 语言从 1.11 版本开始引入的官方依赖管理工具,用于初始化、创建和维护项目的 go.mod 文件,管理项目的依赖关系。 以下是 go mod 最核心、最常…

做学校子网站抖音代运营违法吗

body{margin:8px;} iframe{border:2px;} th,td{padding:1;} table{border-spacing:2px;border-collapse:separate;} dfn{斜体} <dfn> 标签可标记那些对特殊术语或短语的定义。 现在流行的浏览器通常用斜体来显示 <dfn> 中的文本。将来&#xff0c;<dfn> 还可…

网站报名系统怎么做wordpress 点击量

一般是三种方法&#xff1a;(1)用vector的vector&#xff0c;(2)先分配一个指针 数组&#xff0c;然后让里面每一个指针再指向一个数组&#xff0c;这个做法的好处是访问数组元素时比较直观&#xff0c;可以用a[x][y]这样的写法&#xff0c;缺点是它相当于C#中的一个锯齿 数组&…

多轮对话系统设计的逻辑陷阱与解决方案

一、引言:对话系统的复杂性挑战 随着GPT-5等大模型技术的成熟,多轮对话系统在客服、教育、医疗等领域的应用日益广泛。然而,根据2025年MIT人机交互实验室的研究显示,78%的对话系统故障源于设计逻辑缺陷而非技术限制…

手机免费建立网站wordpress 旋转预加载

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

网站综合查询工具在谷歌上怎么做网页

默默地EEer&#xff0c;原文地址&#xff1a; http://www.cnblogs.com/hebaichuanyeah/p/5625233.html 职责链模式指使多个对象多有机会处理请求&#xff0c;避免请求发送者和接受者的耦合关系。 将这些接受处理的对象连成一条链&#xff0c;并沿着该链处理请求。 一个传说中的…

c 教程如何做网站茶叶市场网站建设方案

“开始”-->“运行”-->“cmd”打开命令提示符&#xff0c;&#xff08;或win R&#xff09;输入“netstat -ano”可以看到所有的连接。可能的话&#xff0c;在“windows任务管理器”找到PID对应的程序即可。如果没有PID项&#xff0c;可以在“windows任务管理器”选“查…

app界面生成器网站seo网络优化公司

spring-boot项目搭建一、从官网搭建1、进入spring官网&#xff0c;快速初始化一个项目2、填写项目基本信息3、项目结构分析4、添加项目依赖5、下载到本地6、解压7、idea&#xff0c;打开&#xff0c;使用maven构建项目8、使用maven构建9、这是构建好的&#xff0c;其它目录全部…

嘉兴网站seo外包百度网站提交

1.概念 有监督学习正向传播&#xff1a;输入样本---输入层---各隐层---输出层反向传播&#xff1a;误差以某种形式在通过隐层向输入层逐层反转&#xff0c;并将误差分摊给各层的所有单元&#xff0c;以用于修正各层的权值激活函数&#xff1a;也叫阶跃函数&#xff0c;目的是引…

【光照】[PBR][菲涅尔]实现方法对比

Unity URP中的菲涅尔效应主要采用Schlick近似模型,通过三步流程实现:确定基础反射率F₀、角度依赖计算和金属/非金属处理。该模型以1次pow运算实现高性价比的实时渲染,视觉误差小于2%,并与GGX+Smith模型完美配合。…

专做展厅设计网站专业网站优化seo

信息流广告是什么 “今日头条和百度必有一战”&#xff0c;相信不少的互联网人在过去几个月都听到过类似的断言。定位于信息分发平台的今日头条和主营搜索业务的百度会产生如此大的利益冲突&#xff0c;最核心的点其实就是信息流广告。 信息流广告指的是在用户使用互联网产品或…

20251002NOIP模拟赛

T4: 题目大意: 定义一个数组 \(a\) 是良好的,当且仅当可以选择若干个(可以为 0)不交的区间,将他们内部 reverse 之后升序。 给定 \(n\) 和排列 \(a\),对于每个 \(k\),求有多少子序列不包含 \(a_{k}\) 且是良好…

网站怎么做qq微信登陆个人建网站允许吗

Cython不仅仅是一种编程语言。它的起源可以追溯到SAGE数学软件包&#xff0c;它用于提高数学计算性能&#xff0c;例如涉及矩阵的计算。更一般地说&#xff0c;我倾向于将Cython视为SWIG的替代品&#xff0c;为本机代码生成非常好的Python绑定。SWIG是最早和最好之一&#xff0…

自助网站建设技术支持品牌网站分析

python全栈开发笔记第二模块 第四章 &#xff1a;常用模块&#xff08;第二部分&#xff09; 一、os 模块的 详解 1、os.getcwd() &#xff1a;得到当前工作目录&#xff0c;即当前python解释器所在目录路径 import os j os.getcwd() # 返回当前pyt…

P10279 [USACO24OPEN] The Winning Gene S题解

题目描述 给定一个长为 \(N\) 的字符串 \(S\),其中 \(1\le N\le 3000\)。对某个数对 \((K,L)\),其中 \(1\le L\le K\le N\),从 \(S\) 中取出所有 \(K\) 长度的子串,取出其所有长度为 \(L\) 的子串,将字典序最小的…

广州电商网站开发公司单页面 网站

简介&#xff1a; 7月8日&#xff0c;中文语言理解权威评测基准CLUE公开了中文小样本学习评测榜单最新结果&#xff0c;阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队&#xff0c;在大模型和无参数限制模型双赛道总成绩第一名&#xff0c;决赛答辩总成绩第一名。 作…