Redis事务管道

news2024/11/24 11:45:33

文章目录

    • Redis事务
        • 1.简介
          • (1)什么是事务
          • (2)Redis事务的特点
        • 2.实操案例
          • (0)事务命令
          • (1)正常执行
          • (2)放弃事务
          • (3)全体连坐
          • (4)冤头债主
          • (5)watch监控
    • Redis管道
        • 1.简介
          • (1)什么是管道技术
          • (2)功能
        • 2.实操案例
          • (1)准备文件
          • (2)处理打包文件
        • 3.小总结
          • (1)与原生批量命令对比
          • (2)与事务对比
          • (3)使用注意事项

Redis事务

1.简介
(1)什么是事务
  • 事务是指是程序中一系列严密的逻辑操作,所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。
  • 可以一次执行多个命令,本质是一组命令的集合。
  • 一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。
(2)Redis事务的特点
  • 单独的隔离操作
    • 保证事务里的操作会被连续独占的执行。
    • 命令执行是单线程架构,在执行完事务内所有指令前不能再去同时执行其他客户端的请求。
  • 没有隔离级别的概念
    • 在事务提交前任何指令都不会被实际执行。
    • 也就不存在需要隔离的问题。
  • 不保证原子性
    • 不保证原子性,也就是不保证所有指令同时成功或同时失败。
    • 只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力。
  • 排他性
    • 保证一个事务内的命令依次执行,而不会被其它命令插入。
2.实操案例
(0)事务命令
  • multi:标记一个事务块的开始。

  • exec:执行所有事务块内的命令。

  • discard:取消事务,放弃执行事务块内的所有命令。

  • watch key [k1 k2]:监视一个或多个key,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

  • unwatch:取消对所有key的监控。

(1)正常执行
  • multi --> exec

  • 命令不会立即执行,而是会先放到一个队列中。

  • 一次性、顺序性、排他性的执行一系列命令。
    在这里插入图片描述

(2)放弃事务
  • multi --> discard

  • 在执行事务之前可以通过命令取消事务。
    在这里插入图片描述

(3)全体连坐
  • 当事务中一条命令出错,则整个事物都不能执行。

  • 会产生报错。

    在这里插入图片描述

(4)冤头债主
  • 加入队列时未检查出错误,只有在运行时才会意识到错误。

  • 则错误的命令会报错,其他命令正常执行。

(5)watch监控
  • 使用watch来提供乐观锁定,类似于CAS。

  • 监控中的key在执行事务前被修改,则整个事务都不能执行。

  • 一旦执行exec之前加的监控锁都会被取消。

  • 当客户端连接丢失的时候(比如退出链接)、所有东西都会被取消监视。

Redis管道

1.简介
(1)什么是管道技术
  • 管道技术(Pipeline)是客户端提供的一种批处理技术。
  • 用于一次处理多个 Redis 命令,从而提高整个交互的性能。
  • 用来优化频繁命令往返造成的性能瓶颈。
(2)功能
  • 可以一次性发送多条命令给服务端,服务端依次处理完完毕后,通过一条响应一次性将结果返回。
  • 通过减少客户端与redis的通信次数来实现降低往返延时时间。
  • 实现的原理是队列,先进先出特性就保证数据的顺序性。
  • 仅仅是将命令打包一次性发送,对整个Redis的执行不造成其它任何影响批处理命令变种优化措施,类似Redis的原生批命令(mget和mset)。
2.实操案例
(1)准备文件
  • 原生批命令无法同时操作不同数据类型的命令,要通过文件来处理。

  • 将一系列操作命令写到txt文件中。

    在这里插入图片描述

(2)处理打包文件
  • cat cmd.txt | redis-cli -a xxxx --pipe

  • 将文件通过管道传到redis中执行。

    在这里插入图片描述

3.小总结
(1)与原生批量命令对比
  • 原生批量命令是原子性的,而pipeline是非原子性。
  • 原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令。
  • 原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成。
(2)与事务对比
  • 事务具有原了性,管道不具有原子性。
  • 管道一次性将多条命令发送到服务器,事务是一条一条的发,事务只有在接收到exec命令后才会执行。
  • 执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会。
(3)使用注意事项
  • pipeline缓冲的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续的指令。
  • 使用pipeline组装的命令个数不能太多,不然数据量过大客户端阻塞的时间可能久,同时服务端此时也被迫回复一个队列答复,占用很多内存。

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

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

相关文章

tiki靶机攻略

tiki靶机攻略 扫描 渗透 访问robots.txt 发现目录,访问一下 再次扫描/tiki/目录,然后发现changelog下又tiki的版本信息 kali漏洞搜索,找到一个符合版本的 python3 48927.py 10.4.7.159执行过后,显示不需要密码即可登录 随后bp登…

gd32f470zgt6最小系统 上哪找到

gd32f470zgt6最小系统 上哪找到

Docker 学习路线 2:底层技术

了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理,并有助于您更有效地使用该平台。 Linux容器(LXC) Linux容器(LXC)是Docker的基础。 LXC是一种轻量级的虚拟化解决方案,允许多个隔离的Linux系…

VS Code 开发Java之代码导航和代码编辑

快速导航 VS Code提供了一些功能可以在Java开发时快速导航。 代码导航 大纲视图(Outline view): 方便地导航当前文件中的成员项目视图(Projects view): 项目的详细概述Java编辑器: 支持调用层…

模电学习路径

交流通路实质 列出电路方程1,方程1对时刻t做微分 所得方程1‘ 即为 交流通路 方程1对时刻t做微分:两个不同时刻的方程1相减,并 令两时刻差为 无穷小 微分 改成 差 模电学习路径: 理论 《电路原理》清华大学 于歆杰 朱桂萍 陆文…

3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性,它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包,提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案…

WoShop跨境电商源码:告别繁琐,一键实现批量发货

随着全球电子商务的飞速发展,越来越多的商家开始进军跨境电商领域。然而,搭建一个成功的跨境电商平台需要考虑众多因素,如订单处理、物流配送、支付结算等。在这个过程中,WoShop跨境电商源码因其强大的功能和简易的操作&#xff0…

NOIP2023模拟9联测30 金牌

题目大意 有一棵 n n n个顶点的树,这棵树上长度为 d d d的简单路径的价值为 2 d 2^d 2d。 有 q q q次询问,每次给出两个正整数 x , y x,y x,y,请你回答所有通过顶点 x x x和 y y y的简单路径的价值之和,输出答案模 998244353 99…

【kubernetes】k8s对象☞pod

文章目录 1、什么是pod2、pod的使用2.1 用于管理pod的工作负载资源2.2 pod怎样管理多个容器2.3 pod 操作系统2.4 pod和控制器2.5 pod模板 3、pod的更新与替换3.1 资源共享和通信3.2 pod中的存储3.3 pod联网 4、容器的特权模式4.1 linux 特权容器4.2 windows特权容器 5、静态pod…

uniapp之actionsheet 自定义组件

uniapp本身自带的actionsheet太丑&#xff0c;不够美观。闲着也是闲着&#xff0c;自己实现了一个类似的选择器。 支持功能&#xff1a; 1、左对齐 2、右对齐 3、居中 4、可加图标 下面贴出使用教程&#xff1a; <template><view><action-sheet alignment&…

在Google Kubernetes集群创建分布式Jenkins(一)

因为项目需要&#xff0c;在GKE的集群上需要创建一个CICD的环境&#xff0c;记录一下安装部署一个分布式Jenkins集群的过程。 分布式Jenkins由一个主服务器和多个Agent组成&#xff0c;Agent可以执行主服务器分派的任务。如下图所示&#xff1a; 如上图&#xff0c;Jenkins Ag…

大数据毕业设计选题推荐-系统运行情况监控系统-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

文章目录 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 行级访问控制特性将数据库访问控制精确到数据表行级别&#xff0c;使数据库达到行级访问控制的能力。不同用户执…

Github 自动化部署到腾讯云服务器

1.准备工作 新建仓库 新建项目 推送到远程仓库 2.配置仓库密钥 点击 Settings -> Sectets and variables -> Actions -> New repository sectet 依次添加以下变量 Name&#xff1a;SERVER_HOST / Secret&#xff1a;服务器公网IP Name&#xff1a;SERVER_USERNAME /…

软件测试/测试开发丨Python:易学、强大、多用途的编程语言

点此获取更多相关资料 Python 发展历史 Python 是一门高级编程语言&#xff0c;由 Guido van Rossum&#xff08;龟叔&#xff09; 在 1989 年发明&#xff0c;设计 Python 语言的初衷是为了创造一种介于 C 和 shell 之间&#xff0c;简洁方便&#xff0c;易学易用&#xff0…

第十三章,枚举与泛型例题

例题1 package 例题;interface SeasonInterface{//四季接口int SPRING 1, SUMMER 2, AUTUMN 3, WINTER 4; }enum SeasonEnum{//四季枚举SPRING,SUMMER,AUTUMN,WINTER }public class 例题1 {//定义方法public static void printSeason1(int season){switch (season) {case …

MAA连不上MUMU模拟器

之前一直能正常用&#xff0c;最近突然连接不上&#xff0c;最终发现是adb版本不同造成的&#xff0c;我系统变量的adb版本如下&#xff1a; MUMU自带adb版本如下&#xff1a; 解决办法&#xff1a; 把mumu的adb复制到系统变量路径下&#xff0c;或者把adb的系统变量删除

基于OpenHarmony的启航开发板的基础操作

文章目录 前言一、前提准备二、基础操作1.hb set命令的使用2.hb build -f 命令的使用3.Hello World 案例 前言 在物联网&#xff08;IoT&#xff09;领域&#xff0c;开发板扮演着至关重要的角色&#xff0c;为开发人员提供了实验和原型设计的平台。而OpenHarmony作为一个开源…

NOR Flash基本原理

目录 1. Flash Memory中存储的信息 2. Flash操作 2.1 Read操作 2.2 Program操作 2.3 Erase操作 3 电压阈值分布 4 Block Erase 4.1 Pre-Program Phase 4.2 Erase Phase 4.3 Recovery Phase 5 Erase 中断 6 注意要点 这是之前搞Flash IP时的一个学习笔记&#xff0c…

力扣 搜索旋转排序数组 二分

&#x1f468;‍&#x1f3eb; 33. 搜索旋转排序数组 class Solution {public int search(int[] nums, int target){int l 0;int r nums.length - 1;while (l < r){int m l r >> 1;//else大法&#xff0c;把无序段抛给else&#xff0c;if只处理有序段 // 需要特…