首页 > 数据库 >Redis事务和管道

Redis事务和管道

时间:2024-09-11 14:29:36浏览次数:1  
标签:事务 Redis redis 命令 管道 执行 服务端

Redis事务和管道

事务

一、概念

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

 

  • 单独的隔离操作:Redis事务仅仅是保证事务里的操作会被连续独占地执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端请求。

  • 没有隔离级别的概念:因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了

  • 不保证原子性:Redis事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定 是否开始执行全部指令的能力,没有执行到一半进行回滚的能力。

  • 排他性:Redis会保证一个事务内的命令依次执行,而不会被其他命令插入

 

二、事务命令

redis的全部命令:

  • multi: 标记事务块的开始

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

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

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

  • unwatch:取消watch命令对所有key的监视

 

当一个事务正常执行时,通过multi开始事务,exec提交事务,事务块内的所有命令都正常执行

image-20240911105633950

 

当你不想要执行事务时,可以使用discard 取消事务

image-20240911105935550

 

如果在一个事务中出现了错误命令,那么使用exec提交事务时会报事务取消,其他的命令也不会执行

image-20240911110322468

 

如果一个事务中的命令没有语法上的错误,但是编译会报错,那么在该事务中除了有错误的命令,其他命令都会正确执行

image-20240911110549695

 

 

watch

redis使用watch来提供乐观锁,类似于CAS,乐观锁的策略是提交版本必须大于记录当前版本才能执行更新

正常监听:

image-20240911111200946

在没有其他进程修改的情况下,监听后可以正常修改成功

如果在监听后,提交事务之前,其他进程修改了监听的值,那么事务整体就失败了,会报 nil

image-20240911111853763

 

 

管道

为什么会有管道这个概念?

Redis是一种基于客户端-服务端模型以及请求/响应协议的tcp服务,一个请求会遵循以下步骤:

  1. 客户端向服务端发送命令分四步(发送命令-->命令排队-->命令执行-->返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应

  2. 服务端处理命令,并将结果返回给客户端

上面两个步骤成为 Round Trip Time 简称RTT

如果同时需要执行大量的命令,那么就需要等待上一条命令应答后再执行,这中间不仅多了RTT,还频繁调用系统IO,发送网络请求,同时需要redis调用多次 read() 和 write() 系统方法,对系统有较大的影响,导致性能不好

 

管道(pipeline)可以一次性发送多条命令给服务端,服务端依次处理完毕后,通过一条响应一次性将结果返回,通过减少客户端与redis的通信次数来实现降低往返延时时间,管道的原理是队列,先进先出保证数据的顺序性

image-20240911134217023

 

最终管道的定义是:Pipeline是为了解决RTT往返时,仅仅是将命令打包一次性发送,对整个redis的执行不产生其他影响

 

如何用管道进行命令的批量执行?

首先把要执行的命令放到一个 txt文件中

在没有连接redis的终端中执行 cat cmd.txt | redis-cli -a 123456 --pipe

该命令用管道修饰符连接了起来,表示第一条命令作为参数 传到 第二条命令中。

也就是 txt文件中的命令在 redis中以管道的方式去执行

image-20240911140133289

 

Pipeline缓冲的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续指令

使用pipeline组装的命令个数不能太多,不然数据量过大客户端阻塞的时间可能过久,同时服务端此时也被迫回复一个队列答复,占用很多内存

标签:事务,Redis,redis,命令,管道,执行,服务端
From: https://www.cnblogs.com/wztblogs/p/18408153

相关文章

  • redis通过6379端口无法连接服务器
    今天免费领取了一台云耀云服务器,但是在部署redis的时候碰到了redis在外网无法访问的情况,以下是针对碰到的问题,解决过程的记录。如果配置Redis在不可预知的情况下只能在内网访问,而外网无法访问,先检查一下步骤是否配置1、需要考虑到Redis配置本身是否支持远程外网访问,在redis的配置......
  • Docker 实战:快速安装 Nginx、Redis、MySQL 等常用软件
    演示下如何使用Docker来完成Redis,Tomcat和MySQL等常用软件的安装。介绍了这几个常见的软件安装之后,以后想要安装其他软件,也是依样画葫芦即可。‍总体步骤一般来说,按照如下步骤来完成安装:搜索镜像拉取镜像查看镜像启动镜像(可能需要配置端口映射)容器的操作(例如启停)......
  • Redis的五大数据类型
    Redis的五大数据类型目录一、String数据类型1.SET/GET/APPEND/STRLEN:2.INCR/DECR/INCRBY/DECRBY:3.GETSET:4.SETEX:5.SETNX:6.MSET/MGET/MSETNX:二、List数据类型1.LPUSH/LPUSHX/LRANGE:2.LPOP/LLEN:3.LREM/LSET/LINDEX/LTRIM:4.LINSERT:5.RPUSH/RPUSHX/RPOP/RPOPLPU......
  • redis本机安装
    redis本机安装1、windows版下载:Releases·microsoftarchive/redis·GitHub 2、下载后解压下载的文件即可,无需安装3、 启动服务第一种先点击redis-server.exe再点击redis-cli.exe,两个窗口都不用关,然后开始敲命令第二种运行指令:redis-server.exeredis.windows.c......
  • RAG与LLM原理及实践(17)---Docker Redis & Python Usage
    目录背景Redis环境download修改镜像RunRedisCodingpythonredisdownload基本使用描述完整代码运行结果高阶用法序列化的方式 Snapshot与AOF快照(RDB)AOF(Append-OnlyFile)代码总结发布与订阅描述     代码运行结果注意事项解释Transanction......
  • Redis实现延迟任务的操作流程
    延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务。也就是说,延迟任务是一种计划任务,它被安排在特定的时间后执行,而不是立即执行。延迟任务的常见使用场景有以下几个:定时发送通知或消息:发送定时短信、邮件或应用内消息,如注册确认、订单状态更新、促销活动通知等......
  • KubeCon China 回顾|快手的 100% 资源利用率提升:从裸机迁移大规模 Redis 到 Kubernetes
    大家下午好,我是来自ApeCloud的吴学强,非常高兴能够在KubeCon做分享。今天的分享由我和来自快手的刘裕惺同学共同完成,我们分享的主题是将大规模的Redis实例从裸机迁移到Kubernetes上来提高资源的利用率。我们今天的议题包括几个方面,首先我会来简单介绍一下KubeBlock......
  • Redis
    Redis单机最简配置redis.confport16000protected-modeyesrequirepasshellologfile"logs/16000.log"daemonizeyesappendonlyyesJava连接依赖Jedisimplementation'redis.clients:jedis:5.1.2'这里的用户默认就是default,你也可以传null,密码是requirepass配......
  • redis 正则匹配符合条件的key 进行删除
    //根据名字的key,如果key数量超过100,就进行一次删除publicintclearRedis(@PathVariable("prefix")Stringprefix)throwsIOException{ScanOptionsoptions=ScanOptions.scanOptions().match(prefix+"*").count(1000).build();Cursorcursor=r......
  • 第20篇 window系统安装Redis流程
    1.下载RedisforWindowsRedis官方并没有提供Windows版本的安装包,但你可以使用Microsoft维护的Windows版本的Redis。你可以从以下链接下载RedisforWindows:2.安装Redis运行安装程序:双击下载的.msi文件,启动安装程序。按照安装向导的提示进行安装。这里记得......