Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制

Redis redis 阅读详情
在上一篇博文中,本博主介绍了Redis Cluster的搭建方法,从中可以看出其使用方法与单机版Redis确实存在着不小的差异。实际上,除了搭建配置方法以外,Redis Cluster还具有一些其他方面的不同,譬如它不支持多个数据库,不支持select命令等等,但其中最大的不同还是Redis Cluster不支持复杂的多主键操作。关于这一点,Redis Cluster的官方文档有这样一段描述,现摘录如下:Commands performing complex multi key operations like Set type unions or intersections are not implemented, and in general all the operations where in theory keys are not available in the same node are not implemented。由这段描述可知,在Redis Cluster中任何跨节点的命令都是不允许的,但是落实到具体的系统实现中,Redis Cluster又是如何去处理这些命令的呢?我们不妨通过两种典型的命令来验证一下,其中一种是MULTI/EXEC事务命令,该命令可以将多条Redis命令一次执行,所以这类命令可能同时操作多个主键,另外一种是本身就支持多主键的命令如mset和mget等。下面,本博主就在之前搭建的Redis Cluster上,分别尝试了以上两类命令的不同执行场景,以此来感性地认识Redis Cluster的反应!

情景一:MULTI/EXEC事务中的所有命令均操作相同的主键,且该主键就在当前连接的Redis节点上
  1. [root@compute-09-00 ~]# /usr/local/redis/bin/redis-cli
  2. redis 127.0.0.1:6379> multi
  3. OK
  4. redis 127.0.0.1:6379> set hello world
  5. QUEUED
  6. redis 127.0.0.1:6379> set hello earth
  7. QUEUED
  8. redis 127.0.0.1:6379> set hello china
  9. QUEUED
  10. redis 127.0.0.1:6379> exec
  11. 1) OK
  12. 2) OK
  13. 3) OK
复制代码


执行结果:事务中的每条命令都可以正确执行!

情景二:MULTI/EXEC事务中的所有命令均操作相同的主键,但该主键不在当前连接的Redis节点上
  1. redis 127.0.0.1:6379> multi
  2. OK
  3. redis 127.0.0.1:6379> get foo
  4. (error) MOVED 12182 192.168.32.4:6379
  5. redis 127.0.0.1:6379> set foo bar
  6. (error) MOVED 12182 192.168.32.4:6379
  7. redis 127.0.0.1:6379> exec
  8. (empty list or set)
复制代码


执行结果:事务中的任何命令都无法执行,对于每条命令均返回MOVED信息!


情景三:MULTI/EXEC事务中的所有命令操作不同的主键,且某些主键不在当前连接的Redis节点上
  1. redis 127.0.0.1:6379> multi
  2. OK
  3. redis 127.0.0.1:6379> set hello america
  4. QUEUED
  5. redis 127.0.0.1:6379> set foo rab
  6. (error) MOVED 12182 192.168.32.4:6379
  7. redis 127.0.0.1:6379> exec
  8. 1) OK
  9. redis 127.0.0.1:6379> get hello
  10. "america"
复制代码


执行结果:主键在当前连接的Redis节点上的命令可以正确执行,主键不在当前连接的Redis节点上的命令返回MOVED信息!

情景四:MULTI/EXEC事务中的所有命令操作不同的主键,且所有主键均在当前连接的Redis节点上
  1. redis 192.168.32.3:6379> multi
  2. OK
  3. redis 192.168.32.3:6379> set id 10003
  4. QUEUED
  5. redis 192.168.32.3:6379> set number 20004
  6. QUEUED
  7. redis 192.168.32.3:6379> set student 30098
  8. QUEUED
  9. redis 192.168.32.3:6379> exec
  10. 1) OK
  11. 2) OK
  12. 3) OK
复制代码


执行结果:事务中的所有命令均可以成功执行!

情景五:Multiple主键命令包含了不同的主键,且所有主键均在当前连接的Redis节点上
redis 192.168.32.3:6379> mset id 10004 number 20005 student 30099
(error) ERR Multi keys request invalid in cluster
redis 192.168.32.3:6379> mget id number student
(error) ERR Multi keys request invalid in cluster
执行结果:命令无效,无法执行!

情景六:Multiple主键命令包含了多个相同的主键,且该主键在当前连接的Redis节点上
  1. redis 192.168.32.3:6379> mset id 10004 id 20005 id 30099
  2. OK
  3. redis 192.168.32.3:6379> mget id id id
  4. 1) "30099"
  5. 2) "30099"
  6. 3) "30099"
复制代码


执行结果:命令有效,成功执行!


情景七:Multiple主键命令包含了多个相同的主键,但该主键不在当前连接的Redis节点上
  1. redis 192.168.32.3:6379> mset hello world hello earth hello universe
  2. (error) MOVED 866 192.168.32.2:6379
  3. redis 192.168.32.3:6379> mget hello hello hello
  4. (error) MOVED 866 192.168.32.2:6379
复制代码


执行结果:命令有效,返回MOVED信息!


   基于以上执行结果,我们可以知道对于MULTI/EXEC事务来说,执行效果与逐条处理单个命令一样,被事务包裹的Redis命令连接节点能够处理就处理,无法处理的就返回MOVED信息。但是对于Multiple主键的命令来说,只要在命令中包含了多个不同的主键,那么无论这些主键能不能被连接节点所处理,命令都是无效的!当然,以上只是通过一些具体的命令执行实例来看Redis Cluster的执行效果,如果想对Redis Cluster的命令处理有更详细的了解,那么推荐的方法还是去看源码中的cluster.c文件。
【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01 高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。 阅读详情

相关推荐

一文入门BMS(电池管理系统)

本文章是基于曾师兄的文稿《具有组网扩展功能的新能源汽车电池管理系统》而写的文章。该文章主要是对BMS(Battery Management System,电池管理系统)做一些简要的介绍,借此助各位也助我入门BMS。有纰漏请指出,转载请说明。学习交流请发邮件 1280253714@qq.com。

weixin_45817947的博客 2万+

Jedis cluster命令执行流程剖析

面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>> ...

Viking的博客 1653

手把手教你用Cadence仿真12bit SAR ADC:从电路图到FFT频谱分析(含Simc 18mmrf工艺文件)

本文详细介绍了使用Cadence仿真12bit SAR ADC的全流程,包括电路搭建、仿真环境配置、瞬态仿真优化及FFT频谱分析。基于Simc 18mmrf工艺文件,提供从电路图到性能验证的实战指南,特别分享工程实践中的排错技巧和优化策略,帮助工程师高效完成ADC设计验证。

weixin_30832405的博客 405

Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵

Redis Cluster 集群相关配置,使用集群方式的你必须重视和知晓。别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集群快到飞起,实现真正的高可用却一头雾水,通过下面这些配置详解也让你对集群原理更加深刻,告别技术悬浮。关于 Redis Cluster原理请点击《Redis 高可用篇:Cluster 集群能支撑的数据有多大?》cluster-enabled普通的 Redis 实例是不能成...

码哥字节 836

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

基于 MATLAB 的综合能源系统建模案例 

电平衡约束:P_{gt}(t)+P_{grid}(t)-P_{eb}(t)-P_{load}(t)=0,其中 P_{grid}(t) 为与外部电网的交互功率(正表示购电,负表示售电)。- 电锅炉的热输出功率 Q_{eb} 与输入电功率 P_{eb} 的关系为:Q_{eb}=\eta_{eb}\times P_{eb},其中 \eta_{eb} 为电锅炉的热效率。- 燃气轮机的余热回收功率 Q_{gt} 与发电功率也存在一定关系,例如:Q_{gt}=c\times P_{gt},c 为余热回收比例系数。

qq_57128262的博客 1395

Redis进阶学习10---redis最佳实践

Redis进阶学习10---redis最佳实践Redis最佳实践优雅的key结构BigKey问题BigKey的危害如何发现BigKeys如何删除bigKeys恰当的数据类型小总结 Redis最佳实践 优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符 例如:我们的登录业务,保存用户信息,其key是这样的: 优点: 可读性强 避免key冲突 方便管理 更节省内存:

m0_53157173的博客 1526

欧姆龙PMAC CK3M控制器新手避坑指南:从开箱到EtherCAT总线配置的完整流程

本文详细介绍了欧姆龙PMAC CK3M控制器的完整配置流程,从开箱检查到EtherCAT总线配置,特别针对新手常见问题提供避坑指南。内容包括硬件连接、软件安装、EtherCAT主站初始化、从站配置、电机参数设置等关键步骤,帮助工程师快速掌握PMAC控制器的使用技巧。

weixin_42532938的博客 390

RedisCluster如何高效率地批量插入数据

RedisCluster如何高效率地批量插入数据

Funky_oaNiu的博客 2762

别再为数据发愁了!盘点5个公开可用的医学图像数据集(含MRI/CT/PET合成任务)

本文详细介绍了5个高质量的公开医学图像数据集,涵盖MRI、CT和PET三大模态,适用于深度学习模型训练和医学图像合成任务。每个数据集均提供下载指南、预处理技巧和PyTorch加载示例,帮助研究人员快速获取和处理数据,解决医学AI开发中的数据瓶颈问题。

weixin_30689307的博客 524

SAP PFCG 中的单一角色与复合角色

在 SAP 系统的安全与授权管理中,事务码 PFCG(角色维护)扮演着关键角色。理解单一角色(Single Role)和复合角色(Composite Role)的概念,对于有效地管理用户权限至关重要。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1478

multi redis 不能使用集群_Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制...

[root@compute-09-00 ~]# /usr/local/redis/bin/redis-cliredis 127.0.0.1:6379> multiOKredis 127.0.0.1:6379> set hello worldQUEUEDredis 127.0.0.1:6379> set hello earthQUEUEDredis 127.0.0.1:6379&g...

weixin_39924198的博客 424

57、振荡扫描仪的挠性枢轴:原理、设计与材料选择

本文深入探讨了振荡扫描仪中挠性枢轴的工作原理、设计方法与材料选择。挠性枢轴因其无润滑、高精度、低周期性误差和潜在无限寿命等优势,广泛应用于光学、太空、医学和半导体等领域。文章分析了其在小角度下的优异性能与无法连续旋转等局限性,提供了关键设计公式,并对比了多种挠性材料的性能指标。同时,结合不同应用场景提出设计优化策略,并展望了微型化、智能化和高性能材料等未来发展趋势,为工程实践提供了系统的设计流程与选型建议。

numpy6sculptor的博客 95

ZooKeeper的典型应用

Zookeeper是一个高可用的分布式数据管理与协调框架。基于对ZAB算法的实现,该框架能够很好地保证分布式环境中数据的一致性。 随着近年来互联网系统规模的不断扩大,大数据时代飞速到来,越来越多的分布式系统将Zookeeper作为核心组件使用,如Hadoop、HBase和Kafka等。 1.数据发布/订阅 数据发布/订阅(Publish/Subscribe)系统,即所谓的配置中心,顾名思义就是发布者将数据发布到ZooKeeper的一个或一系列节点上,供订阅者进行数据订阅,从而达到动态获取数据的目的,实

yfy的博客 673

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JedisCluster源码解析

JedisCluster源码解析

Isonion的博客 493

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Redis Lettuce在Cluster模式下使用(自定义事务)

在redis cluster模式下,基于某些redis业务为了保证redis command的原子性又要提高程序的高并发性能,从而直接使用redis事务可能会更好的满足的我们的要求,但是直接使用redis cluster的连接是不支持事务的,也就是multi模式,单是4.0以上的lettuce官网说是支持multi模式的,经过多次实践研究终于得出了一种可以在redis cluster模式下使用multi的方案。直接连接cluster不可以那么我们直接连接到单台的redis。

Timmer的博客 2868

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Redis集群--使用/注意事项

本文介绍使用Redis集群时需要注意的问题。

IT利刃出鞘的博客 7826

redis之---redis集群方案

本篇文章主要写redis的集群方案相关知识,欢迎大家多多斧正,如果觉得小墨我写得用心的话,可以点个赞啊。 redis提供原生的高可用方案有: 1,主从复制 2,哨兵机制 3,cluster 我们比较下: - 复制:复制主要实现了数据的多机备份以及对于读操作的负载均衡和简单的故障恢复。缺陷是故障恢复无法自动化、写操作无法负载均衡、存储能力受到单机的限制。 - 哨兵:在复制的基础上,哨兵实现了 自动化 的 故障恢复。缺陷是 写操作 无法 负载均衡,存储能力 受到 单机 的限制。 - 集群:通过集群,

as4566的博客 577

#### Redis Cluster 限制及解决方案 ####

转自:https://www.cnblogs.com/lovezbs/p/13885569.html 仅供个人备份,浏览请务必查看原文 1. 概述 Redis Cluster 是 Redis 原生的数据分片实现,可以自动在多个节点上分布数据,不需要依赖任何外部的工具。 Redis Cluster 中所有 key 会被分派到16384个slot(hash 槽)中,这些 slot 又会被指派到多个 Redis 节点上。 一个 key 会映射到某个 slot,算法: HASH_...

仅做个人笔记 3874

Redis集群(Cluster)

三种数据分片算法,搭建redis集群,redis集群扩容

weixin_61427900的博客 3852

数据结构--知识点16--搜索算法(二叉树)

文章目录一、树的概念1、特点2、树的术语3、树的种类4、树的存储与表示5、常见的树的应用场景二、二叉树1、概念2、性质 一、树的概念 树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构 1、特点 每个节点有零个或多个子节点 没有父节点的节点称为根节点 每一个非根节点有且只有一个父节点 除了根节点外,每个子节点可以分为**多个不相交(因为都只有一个父节点)**的子树 2、树的术语 节点的度:一个节点含有的子树的个数称为该节点的度 树的度:一棵树中,最大的节点的度称为树的度 叶节点或终端节点

ANingL的博客 3543

redis中的multi和pipeline

事务块 multi redis中的 multi 方法,提供了一个队列用于缓存多个指令,...

aben_sky的专栏 1869

JedisCluster模式尝试进行批量操作

搭建完redis集群后,可以通过jedis的JedisCluster来访问Redis集群,这里列出使用jedisCluster的spring bean配置方式: <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxI...

weixin_30521649的博客 657

Redis之——Jedis、jedisCluster的使用

1、Jedis客户端 https://redis.io/clients 2、Jedis源码包与使用介绍 https://github.com/xetorthio/jedis 3、项目中使用 通过maven引入Jedis的依赖包 <dependency> <groupId>redis.clients</groupId> <art...

冰河的专栏 9035
上一篇: 解决IntelliJ IDEA中文输入法下,输入提示框不跟随问题
下一篇: Spring 源码阅读 BeanFactory(三) 对象的初始化 singleton 草稿
weiythi
博客等级 码龄16年 23粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值