Redis事务与管道

Redis事务
在这里插入图片描述
可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行执行而不会被其他命令插入,不许加塞。
一个队列中,一次性、顺序性、排他性的执行一系列命令。

Redis事务VS数据库事务
在这里插入图片描述
常用命令
在这里插入图片描述
情况1:正常执行
MULTI 与 EXEC
在这里插入图片描述
multi执行后开启事务,把后续的每条执行命令放在队列QUEUE中,当输入exec执行命令后,队列中的相关指令才开始执行。

情况2:放弃事务
MULTI与DISCARD
在这里插入图片描述
情况3:全体连坐
在这里插入图片描述
在这里插入图片描述
在往队列中添加命令时,某个命令是错误的命令,语法编译错误,那么执行exec的操作会报出异常,无法继续完成队列中的命令。
在这里插入图片描述
情况4:冤头债主
这种是命令执行异常,不是命令编译异常
在这里插入图片描述
Redis不能提供事务的回滚功能,开发者必须在事务执行出错以后,自行恢复数据库的状态。
在这里插入图片描述
特别注意与传统数据库事务的区别,不一定要么一起成功,要么一起失败。
在这里插入图片描述
在这里插入图片描述
情况5: watch监控

Redis使用Watch来提供乐观锁定,类似于CAS(Check-and-Set)
悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此次期间别人有没有去更新这个数据。
乐观锁的策略:提交的版本必须大于记录当前版本才能执行更新。
CAS
在这里插入图片描述
watch操作
监控并顺利的执行
在这里插入图片描述

监控
在这里插入图片描述
在 set balance 200的时候,另外一个事务执行了set balance 300
在这里插入图片描述
由于balance的值被另外一个事务修改了,再次执行事务的提交exec操作,执行失败。
在这里插入图片描述unwatch 可以放弃对于key的监控操作
在这里插入图片描述
redis事务小结

  1. 一旦执行了exec之前加的监控锁都会被取消掉了。
  2. 当客户端连接丢失的时候(如退出连接),所有的东西都会被取消监视。在这里插入图片描述

Redis管道

如何优化频繁的命令往返造成的性能瓶颈?
在这里插入图片描述

在这里插入图片描述
解决思路—管道
在这里插入图片描述
Pipeline是为了解决RTT往返时,仅仅是将命令打包成一次性发送,对整个redis的执行不造成其他任何影响。批处理命令的变种优化方式,类似redis的原生批命令(mget与mset)
redis的管道执行,将命令打包到一个txt文件中,cat读取结果集,同时执行后续的redis-cli的命令,批量执行txt文件中的命令。类似于SQL脚本的感觉
在这里插入图片描述

在这里插入图片描述
结果查询
在这里插入图片描述
管道与原生批量命令的对比

  • 原生批量命令是原子性的(mget mset),pipeline是非原子性的
  • 原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令
  • 原生批量命令是服务端实现,pipeline需要服务端与客户端共同完成。

Pipeline与事务的对比

  • 事务具有原子性,管道不具有原子性
  • 管道一次性将多条命令发送到服务器,事务是一条一条的发,事务只有在接收到exec命令后才会执行,管道不会
  • 执行事务时阻塞其他命令的执行,而执行管道中的命令时不会

使用pipeline的注意点
在这里插入图片描述
在这里插入图片描述

官网地址

Redis 事务
Redis 管道

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

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

相关文章

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、…

Alembic 实战指南:快速入门到FastAPI 集成

一、快速开始 1.1 简介 Alembic 是一个基于 SQLAlchemy 的数据库迁移工具,主要用于管理数据库模式(Schema)的变更,例如新增表、修改字段、删除索引等,确保数据库结构与应用程序的 ORM 模型保持一致。 Alembic 通过版…

LRU(最近最少使用)算法实现

核心思想与基本思路 LRU(Least Recently Used)算法是一种缓存淘汰策略,其核心思想是淘汰最近最少使用的数据。 最近使用原则:最近被访问的数据在未来被访问的概率更高,因此应保留在缓存中。淘汰机制:当缓…

现在有分段、句子数量可能不一致的中英文文本,如何用python实现中英文对照翻译(即每行英文对应相应的中文)

以下是处理分段且中英文句子数量可能不一致的文本的Python实现方案,包含分句、翻译和对齐功能: from googletrans import Translator import redef split_paragraphs(text):"""按空行分割段落并清洗"""return [p.strip()…

C语言每日一练——day_8

引言 针对初学者,每日练习几个题,快速上手C语言。第八天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

基础知识《Redis解析》

Redis 详细解析与介绍 Redis(Remote Dictionary Server)是一个开源的高性能键值对(Key-Value)数据库,支持多种数据结构(如字符串、哈希、列表、集合等),广泛应用于缓存、消息队列、…

区跨链知识和概念

1、以太坊 Geth 源码解析 Geth(Go Ethereum)是以太坊官方提供的 Go 语言实现的客户端,广泛用于以太坊全节点运行、挖矿、DApp 开发等。理解 Geth 的源码有助于掌握以太坊区块链底层逻辑,如区块同步、EVM 执行、P2P 交互等。 2、…

Vue 计算属性与 Data 属性同名问题深度解析

文章目录 1. 问题背景与核心概念1.1 Vue 响应式系统架构1.2 核心概念定义 2. 同名问题的技术分析2.1 同名场景示例2.2 问题发生机制 3. 底层原理剖析3.1 Vue 初始化流程3.2 响应式系统关键代码 4. 问题解决方案4.1 最佳实践建议4.2 错误处理机制 5. 性能影响分析5.1 递归调用性…

Mybatis——基础操作、动态SQL

目录 一.基础操作 1.删除 2.新增 3.更新 4.查询 5.XML映射文件 二、动态SQL 1.<if> 2.<where> 3.<set> 4.<foreach> 5.<sql> 6.<include> 一.基础操作 1.删除 参数占位符&#xff1a; 注意&#xff1a; #{...}相比于${...}…

[设计模式]1_设计模式概览

摘要&#xff1a;设计模式原则、设计模式的划分与简要概括&#xff0c;怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用&#xff0c;后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则&#xff08;语言无关&#xff09; 本质原理图 原…

C语言数据类型取值范围及格式化符号

一、数据类型取值范围与格式化输出符号表格 数据类型大小&#xff08;字节&#xff09;取值范围格式化输出符号char1-128到127<br>或0到255&#xff08;如果声明为unsigned char&#xff09;%c (字符)<br>%hhu (无符号)signed char1-1.2810到1.2710%hhd (有符号)u…

2024华东师范大学计算机复试上机真题

2024华东师范大学计算机复试机试真题 2023华东师范大学计算机复试机试真题 2022华东师范大学计算机复试机试真题 2024华东师范大学计算机复试上机真题 2023华东师范大学计算机复试上机真题 2022华东师范大学计算机复试上机真题 在线评测&#xff1a;传动门&#xff1a;pgcode…

星越L_内后视镜使用讲解

目录 1内后视镜角度调节 2,防炫目功能

Spring Boot应用首次请求性能优化实战:从数据库连接池到JVM调优

目录 问题现象与背景分析性能瓶颈定位方法论数据库连接池深度优化Spring Bean生命周期调优JVM层性能预热策略全链路监控体系建设生产环境验证方案总结与扩展思考1. 问题现象与背景分析 1.1 典型问题场景 在某互联网金融项目的Spring Boot应用上线后,运维团队发现一个关键现象…

【深度解析:以“不要的心态”获取所求的本质逻辑】

深度解析&#xff1a;以“不要的心态”获取所求的本质逻辑 一、文化基因&#xff1a;礼让传统与权力合法性的双重编码 儒家伦理的深层渗透 孔子提出"礼之用&#xff0c;和为贵"&#xff0c;将"辞让"纳入"仁义礼智信"的道德体系。《礼记》明确记…

C++【类和对象】(结束篇)

C类和对象 1.static成员2.友元3.内部类4.匿名对象5.对象拷贝时的编译器优化 1.static成员 用static修饰的成员变量叫做静态成员变量&#xff0c;静态成员一定要在类外进行初始化。静态成员变量为所有类的共享&#xff0c;放入静态区&#xff0c;不属于某个具体对象&#xff0c…

每日一题---腐烂的苹果(广度优先搜索)

腐烂的苹果 给定一个 nm nm 的网格&#xff0c;其中每个单元格中可能有三种值中的一个 0 , 1 , 2。 其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果&#xff0c;2 表示这个格子有一个腐烂的苹果。 腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌&…

maven笔记

maven介绍和作用 Maven 是一款为 Java 项目构建管理、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 主要作用的理解&#xff1a; 依赖管理&#xff1a; 在编写项目时我…

模板-C++提高编程

C的一种编程思想称为泛型编程&#xff0c;用到的技术就是模板 C提供两种模板&#xff1a;函数模板和类模板。 1.函数模板 1.函数模板作用 建立一个通用函数&#xff0c;其返回值类型和形参类型可以用一个虚拟的类型来代替,提高代码复用性&#xff0c;将类型参数化。 2.语法…

基于Asp.net的物流配送管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…