redis事务及锁应用、发布订阅模式

redis的发布订阅和锁 从EVAL的第三个参数开始算起,表示在脚本中所用到的那些Redis键(key),这些键名参数可以在 Lua中通过全局变量KEYS数组,用1为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。​ ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。 阅读详情


事务

mysql和ridis事务对比:


redis事务时执行命令放到了队列里。


注:rollback与discard的区别

如果已经成功执行了2条语句,第三条语句出错

rollback后前2条语句影响消失。

discard只是结束本次事务,前2句造成的影响还在。


注:在multi后面的语句中,语句出错可能有2中情况

1.语法就有问题

这种exec时,所有语句都得不到执行


2.语法没错,但使用对象有问题,比如zadd操作list对象。exec之后,会执行正确的语句,并跳过有不适当的语句。



watch监控key

  watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key.这 样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了exec,discard,unwatch命令都会清除连接中的所有监视。


be


用法:

watch key1 key2 ... keyN

作用监听key1 key2 keyN有没有变化,如果有变化,则事务取消

例如:

客户端1:设置了watch一张票的数目,然后开启multi事务,当他在执行exec前,客户端2买了这张票,exec会执行失败。


unwatch

取消所有watch监听


乐观锁和悲观锁区别:(转自:http://blog.youkuaiyun.com/hongchangfirst/article/details/26004335

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。


乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。


两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。




模式:

publish----->频道-----》subscribe


下面的channel代表频道名:


publish channel 内容 --发布新闻内容

subscribe channel 内容 --订阅新闻频道


适宜做在线聊天,消息推送


注意:

1.如果先发布,客户端未此时未订阅,之后客户端订阅不会显示之前发布的消息。


psubscribe channel*          凡是channel开头的频道,全部监听 


Redis(三) 事务与发布订阅 阅读详情

相关推荐

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 234

Ridis简介

Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、带半径查询的地理空间索引和流。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和带有Redis集群的自动分区提供高可用性。 您可以对这些类型运...

开发笔记 1956

电力抄表协议DL/T645和698.45到底有啥区别?一张图帮你选对协议

本文深入对比了电力抄表协议DL/T645和DL/T698.45的技术差异,从协议架构、报文结构、功能覆盖到实施成本进行全面分析。通过实际案例和数据,揭示698.45协议在通信效率、业务扩展性和长期成本上的优势,并提供清晰的选型决策流程图,帮助工程师根据具体需求选择最适合的电力抄表协议。

weixin_38168696的博客 401

2.Redis数据类型api集合

Redis数据类型api集合: 编码类型 序号 命令及描述 使用场景 String 1 SET key value 设置指定 key 的值 数据结构特点:时间复杂度好,性能高。 适用业务场景:分布式锁、普通key-value缓存、redis限流控制 2 GET key 获取指定 key 的值

爱欧米 446

STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入

本例程使用STM32G070xx芯片,Flash大小128KB,Flash每页(2048字节)写满后再擦除。操作存储区分为64块,每块32字节,即写满64次擦除一次;标定存储区分为16块,每块128字节,即写满16次擦除一次,每个存储区的块都有各自的头部标记

RaphaelCeo的博客 1545

告别Windows!Oculus Quest 2在Mac M1上的串流实战(scrcpy+SideQuest避坑指南)

本文为Mac M1用户提供了Oculus Quest 2在macOS上实现高清低延迟串流的实战指南。通过使用开源工具scrcpy和SideQuest,绕开官方限制,详细讲解了从环境准备、无线调试到画质与延迟优化的完整步骤,重点解决了Apple Silicon芯片Mac的连接与性能问题,助你告别Windows依赖。

weixin_29224309的博客 308

Redis数据库快速入门

拿到一个Redis实例的连接池,避免每次建立、释放连接的开销,节省了每次连接用的时间,文中设置了最大10个。使用pycharm操作redis,pycharm相当于客户端,输入redis命令即可对数据库进行操作。redis 数据放在内存中,如果断电,数据丢失---》需要有持久化的方案。普通链接是指,直接操作redis,每一次操作都会建立一条链接。方式二:redis-cli -h 地址 -p 端口。管道是指,将多条redis操作放在。的操作,可以作用于敏感,重要的数据。二、pycharm操作redis。

Gefangenes的博客 830

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2158

Redis?它主要用来什么的

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。大多数小伙伴都知道,Redi

野蛮女孩的博客 16万+

星光、黑光、全彩夜视摄像头技术解析与实战选型指南

本文深入解析了星光、黑光、全彩与红外等主流夜视摄像头技术的工作原理与核心差异。针对不同监控场景与预算,提供了实战选型指南,帮助用户在安防项目中做出明智决策,实现夜间监控效果最大化。

weixin_29179311的博客 347

Freeswitch 如何检测链路是否有回铃音

Freeswitch回铃音检测解决方案 问题描述:呼叫手机时,虽然信令正常(183/180),但部分手机无回铃音,导致坐席无法判断是否接通,用户体验差。 解决方案: 先播放本地音频作为回铃音 实时检测用户侧是否有声音输入 检测到声音后自动切换为用户侧音频 技术实现: 使用Freeswitch APP实现功能 创建结构体保存实例数据(包括铃声文件、会话句柄、VAD检测器等) 通过media bug机制实现音频流的替换 利用VAD(语音活动检测)技术监控用户侧声音 当检测到用户说话时自动终止本地铃声播放 该方案

2301_81507069的博客 51

《Redis 入门指南:快速掌握高性能缓存技术》

安装redis非常简单,只需要下载压缩文件解压即可导航栏输入cmd回车直接双击redis-server注意:这个窗口不能关闭然后就可以在这里操作 redis数据库了。

weixin_67914777的博客 1448

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2033

redis2 redis事务 悲观锁 乐观锁 主从复制 jedis事务,锁,主从复制 jedisPool redis的缓存击穿 缓存雪崩

1 、redis的事务 怎么玩: 3阶段: 3特性: 表锁:并发性极差 一致性好 行锁:并发性好 一致性差 悲观锁:悲观认为会修改 乐观锁:乐观认为不会修改 (常用) 在这条数据上加上版本号,提交时如果不是这条数据的话,会报错,拿最新数据,比对版本号,重新提交。 2、redis的发布订阅 3、redis的主从复制 一主二从: 一个主机两个从机 主机挂掉,从机原地待命。 从机挂掉,重启后,需要重新连接主机。 读写分离: 只有主机能写,从机不能写 薪火相传: 反客为主

AdamCafe的博客 222

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

redis进阶使用

分布式锁 redis实现是非公平锁,ectd、zk用来实现公平锁 获取不到锁的客户端阻塞等待,阻塞连接返回 set lock uuid nx ex 30 #不存在才能设置,定义加锁行为,占用锁,30s超时。或者用setnx if (get(lock) == uuid) #释放锁 del(lock) 非公平锁:自旋锁,独占cpu不断尝试获取锁 公平锁:互斥锁,按照请求顺序得到锁 阻塞连接 使用list数据结构,队首入队LPUSH,用队尾弹出命令RPOP,这个命令会...

weixin_42335835的博客 283

redis简单入门

redis入门安装性能测试(redis-benchmark)基础数据类型StringListSetHashZset(有序集合)geospatial(地理空间)HyperloglogBitmap(位存储)事务锁(监控)jeidsSpringBoot整合redis使用部分源码编写自己的 redisTemplateRedis持久化RDB(Redis DateBase)AOF(Append Only File)Redis发布订阅Resis主从复制模拟主从复制哨兵模式缓存穿透缓存击穿缓存雪崩 Redis 是一个开源

qq_57187979的博客 992

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

可以一次执行多个命令,本质是一组命令的集合。一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。单独的隔离的操作官网说明这四个指令构成了 redis 事务处理的基础。1.MULTI 用来组装一个事务;将命令存放到一个队列里面2.EXEC 用来执行一个事务;//commit3.DISCARD 用来取消一个事务;//rollback4.WATCH 用来监视一些 key,一旦这些 key 在事务执行之前被改变,则取消事务的执行。

weixin_47735032的博客 2519

redis发布订阅和事务管理

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系:当有新消息通过PUBLISHRedis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

weixin_63970667的博客 1450

【redis基础】事务|管道|发布订阅

开启以 MULTI 开始一个事务入队将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面执行由EXEC命令触发事务Pipeline 与原生批量原生批量命令是原子性(如:mset,mget),pipeline是非原子性原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成Pipeline 与事务对比事务具有原子性,管道不具有原子性。

m0_65431718的博客 1万+

Redis发布订阅

一 、redis发布订阅模式队列:基于 list 结构的消息队列,是一种 Publisher 与 Consumer 点对点的强关联关系通道channel:可实现消费者订阅多个通道模式Pattern:与通道的区别是 1、模式无需完整的通道名称订阅,用模糊订阅(通过?,*来代替)二、通道与模式两者订阅模式原理实现通道:内部实现是通过(PubSub_Channel)键对值,key(数组元素)为channel,value就是某个clientPattern。

m0_55736088的博客 3766

Redis发布订阅及事务管理

在执行multi之前,先执行 watch key1 [key2 ....] 用于指定key的监视,如果在事务执行前这些key被其他命令锁改动,那么事务将被打断。用于取消命令对所有key的监视,如果在执行watch命令之后,Exec或DisCard命令先被执行的话,那么就不需要再次执行unwatch。4、在事务的执行过程中,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求,不会插入到事务执行的命令序列中.3、收到Exec命令后,进入事务执行,如果事务中有任意命令执行失败,其余的命令依旧会执行;

AXDRXS的博客 1585

Redis实用附加功能功能回顾:从慢查询到发布订阅

本文深入探讨了Redis的多个功能模块,包括慢查询分析、Redis Shell、Pipeline、事务与Lua脚本、Bitmaps、HyperLogLog、发布订阅等。通过这些功能,开发者能够优化Redis性能、提升响应速度、减少内存占用,并有效支持高并发、大数据量的场景应用。文章不仅介绍了这些功能的使用方法,还提供了最佳实践和优化建议,帮助开发者在实际应用中实现性能提升和资源优化。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

Redis | 第8章 发布订阅与事务《Redis设计与实现》

参考资料:《Redis设计与实现 第二版》;发布订阅事务Lua 脚本排序二进制位数组慢查询日志监视器;本篇将介绍 Redis 的发布订阅与事务。Redis 提供了频道与模式的订阅与退订,支持对频道发送消息。Redis 的事务机制支持一次性、按顺序执行多个命令,以及事务的 ACID 性质;《Redis常用命令及示例总结(API)》最后编辑于:2025-04-21 11:08:19©著作权归作者所有,转载或内容合作请联系作者。

qq_24428851的博客 855

redis事务、管道及发布订阅

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

qi341500的博客 1092

redis的事务、管道和发布订阅一篇文章搞懂

按照我的理解redis管道类似于批量操作,避免单个数据执行到来的频繁命令往返;同样的道理,在数据库中如果不使用批量操作而使用单个操作数据库,数据访问过于频繁也导致消耗I/O,以及数据库连接数。Redis是一种基于客户端-服务端模式以及以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:1 客户端向服务器端发送分四步(发送命令->命令排队 -> 命令执行 -> 返回结果),并监听Socket返回,通常一阻塞模式等待服务端响应。2 服务端处理命令,并将结果返回客户端。

qq_39126115的博客 1158
上一篇: reids的hash哈希数据类型操作
下一篇: vagrant package打包box详解
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值