Redis 7 第五讲 事务、管道、发布订阅 过渡篇

这篇具有很好参考价值的文章主要介绍了Redis 7 第五讲 事务、管道、发布订阅 过渡篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 事务

理论

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

        一个队列中,一次性、顺序性、排他性的执行一系列命令

Redis事务 VS 关系型数据库事务 

单独的隔离操作 Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
没有隔离级别的概念 事务提交前任何指令不会被执行,因此不存在脏读、幻读等
不保证原子性 Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
排它性 Redis会保证一个事务内的命令依次执行,而不会被其它命令插入

命令

DISCARD 取消事务,放弃执行事务块内的所有命令。
DISCARD 取消事务,放弃执行事务块内的所有命令。
EXEC 标记一个事务块的开始。
UNWATCH  取消 WATCH 命令对所有 key 的监视。
WATCH   监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

案例

 正常放行

         (MULTI->指令集->EXEC)

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

 放弃事务

        (MULTI->指令集->DISCARD) 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

全部连坐

        一个队列中,命令在写入队列时出现错误,将直接影响队列整体的提交。

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

冤头债主

        一个队列中,命令在写入队列时未出现错误,但在执行时出错。只影响错误指令的执行结果,其他正常执行的指令结果没影响。

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

WATCH监控 

        Redis 使用watch提供乐观锁锁定,类似CAS(CHECK-AND-SET)

悲观锁(Pessimistic Lock) 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,想拿这个数据就会block直到它拿到锁。
乐观锁(Optimistic Lock) 每次去拿数据的时候都认为别人不会修改,所以不会上锁,在更新 的时候会判断一下在此期间别人有没有去更新这个数据。
乐观锁策略:提交版本必须 大于 记录当前版本才能执行更新
CAS 利用WATCH去监控key,EXEC时去验证是否被操作

        初始化acount和balance两个key,先监控再开启multi保证两key变动在同一个事务内

未加塞 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java加塞 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java
如果监控的balance事务开启后,被其他客户端修改后,当前客户端的事务失败。

 UNWATCH

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

管道 

 面试题

        如何优化频繁命令往来造成的性能瓶颈?

        管道(pipeline)可以一次性发送多条命令给服务端,服务端依次处理完完毕,通过一次性将响应结果返回,减少客户端与redis的通信次数来实现降低往返延时时间。

        pipeline实现的原理是队列,先进先出特性就保证数据的顺序性。 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

作用

         Pipeline是为了解决RTT往返回时,仅仅是将命令打包一次性发送,对整个Redis的执行不造成其它任何影响。简言之,批处理命令变种优化,类似Redis的原生批处理命令(mget/mset)

 案例 

         利用Linux的CAT命令特性,返回结果集作为pipe的参数Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

 总结

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

发布订阅 (了解)

理论

        一种消息通信模式:发送者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收消息,可以实现进程间的消息传递 。

        Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。

        代表我个人,不推荐使用该功能,专业的事情交给专业的中间件处理,redis就做好分布式缓存功能

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

案例 

        先订阅再发布 

SUBSCRIBE pattern [pattern ...]订阅一个或多个符答给定模式的频道。

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

PUBSUB subcommand [argument [argument ...]查看订阅与发布系统状态。 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,javaRedis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

PUBLISH channel message将信息发送到指定的频道。 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

PUNSUBSCRIBE[pattern[pattern ..]退订所有给定模式的频道。 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

SUBSCRIBE channel [channel ...]订阅给定的一个或多个频道的信息。 

Redis 7 第五讲 事务、管道、发布订阅 过渡篇,技术专研,redis,事务,watch,缓存,python,java

UNSUBSCRIBE [channel [channel ...]指退订给定的频道。 

 缺点

         发布的消息在Redis系统中不能持久化,因此,必须先执行订阅,再等待消息发布

        消息只管发送对于发布者而言消息是即发即失的,不管接收,也没有ACK机制,无法保证消息的消费成功 

        Redis5.0版本新增了Stream数据结构,不但肢持多播,还支持数据持久化,相比Pub/Sub更加的强大 

🌹 以上分享 Redis 事务、管道、发布订阅,如有问题请指教。

🌹🌹 如你对技术也感兴趣,欢迎交流。

🌹🌹🌹  如有需要,请👍点赞💖收藏🐱‍🏍分享 文章来源地址https://www.toymoban.com/news/detail-682813.html

到了这里,关于Redis 7 第五讲 事务、管道、发布订阅 过渡篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis---事务&管道

    目录 一、Redis的事务是什么? 1.1 Redis和关系型数据库事务的区别  二、怎么玩Redis事务?  2.1  正常执行:  2.2 放弃事务  2.3  全体连坐  2.4  冤头债主  2.5  watch监控 三、管道 3.1  为什么会引入管道这个概念呢?我们首先来看一道面试题 3.2   管道是什么?  3.3  管道的

    2024年02月03日
    浏览(35)
  • 4.redis-事务和管道

    目录 一.事务   1.特性   2.命令 二.管道 pipe   1.操作   2.与原生批量命令对比   4.注意事项   1.特性     1) 单独的隔离操作       Redis的事务仅仅是保证事务里的操作会被连续独占得执行,redis命令执行是单线程架构,在执行完事事务内所有指令是不可能再去同时执行其他客

    2023年04月09日
    浏览(35)
  • Go Redis 管道和事务之 go-redis

    Redis pipelines(管道) 允许一次性发送多个命令来提高性能,go-redis支持同样的操作, 你可以使用go-redis一次性发送多个命令到服务器,并一次读取返回结果,而不是一个个命令的操作。 Go Redis 管道和事务: https://redis.uptrace.dev/zh/guide/go-redis-pipelines.html 管道 Watch 监听 事务 通过 g

    2024年02月09日
    浏览(40)
  • redis发布订阅模型

    Redis 的发布订阅基于 publish , subscribe , psubscribe 订阅 发布 订阅 发布 订阅的状态的推进 向 new.it 发送消息 1.频道订阅和退订 Redis 订阅关系保存在服务器状态的 pubsub_channels 字典 key 为 channel , value 为链表,链表上有订阅该频道的 Client 如图所示 1.1订阅频道 subscribe Client 订阅 pu

    2024年02月13日
    浏览(36)
  • Redis发布订阅机制学习

    【IT老齐151】Redis发布订阅机制是如何实现的?_哔哩哔哩_bilibili go-redis的发布与订阅 - 知乎 (zhihu.com) 先输入   redis-server.exe   启动redis,否则对应接口不开放 再输入   redis-cli 命令启动客户端服务 当一个客户端c1去向redis订阅一个主题chatroom的时候,Redis内部就会创建一块空

    2024年02月09日
    浏览(41)
  • Redis发布订阅

    Redis 发布订阅(pub/sub)是一种 消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。 订阅/发布消息图: 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系: 当有新消息通过 PUBLISH

    2024年02月11日
    浏览(41)
  • redis 发布和订阅

    目录 一、简介  二、常用命令 三、示例 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系: 当

    2024年02月12日
    浏览(40)
  • Redis(03)——发布订阅

    基于频道 publish channel message:将信号发送到指定的频道 pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态 subscribe channel [channel]:订阅一个或多个频道的信息 unsubscribe [channel [channel]]:退订指定的频道,若没有指定频道,则默认退订所有频道 基于模式 psubcribe pattern [pa

    2024年02月20日
    浏览(39)
  • JAVA 实现 Redis 发布订阅

    发布订阅: 消息发布者发布消息 和 消息订阅者接收消息 ,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会派送给我们 Redis 发布订阅(pub/su

    2024年02月14日
    浏览(39)
  • Redis 消息队列和发布订阅

    采用redis 三种方案: ● 生产者消费者:一个消息只能有一个消费者 ● 发布者订阅者:一个消息可以被多个消费者收到 ● stream模式:实现队列和广播模式 Producer调用redis的lpush往特定key里放消息,Consumer调用brpop去不断监听key。 1、利用redis的链表,存储数据,实现队列模式

    2024年01月18日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包