Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制
来源:互联网 发布:淘宝新上的宝贝找不到 编辑:程序博客网 时间:2024/06/06 12:23
在上一篇博文中,本博主介绍了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节点上
执行结果:事务中的每条命令都可以正确执行!
情景二:MULTI/EXEC事务中的所有命令均操作相同的主键,但该主键不在当前连接的Redis节点上
执行结果:事务中的任何命令都无法执行,对于每条命令均返回MOVED信息!
情景三:MULTI/EXEC事务中的所有命令操作不同的主键,且某些主键不在当前连接的Redis节点上
执行结果:主键在当前连接的Redis节点上的命令可以正确执行,主键不在当前连接的Redis节点上的命令返回MOVED信息!
情景四:MULTI/EXEC事务中的所有命令操作不同的主键,且所有主键均在当前连接的Redis节点上
执行结果:事务中的所有命令均可以成功执行!
情景五: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节点上
执行结果:命令有效,成功执行!
情景七:Multiple主键命令包含了多个相同的主键,但该主键不在当前连接的Redis节点上
执行结果:命令有效,返回MOVED信息!
情景一:MULTI/EXEC事务中的所有命令均操作相同的主键,且该主键就在当前连接的Redis节点上
执行结果:事务中的每条命令都可以正确执行!
情景二:MULTI/EXEC事务中的所有命令均操作相同的主键,但该主键不在当前连接的Redis节点上
执行结果:事务中的任何命令都无法执行,对于每条命令均返回MOVED信息!
情景三:MULTI/EXEC事务中的所有命令操作不同的主键,且某些主键不在当前连接的Redis节点上
执行结果:主键在当前连接的Redis节点上的命令可以正确执行,主键不在当前连接的Redis节点上的命令返回MOVED信息!
情景四:MULTI/EXEC事务中的所有命令操作不同的主键,且所有主键均在当前连接的Redis节点上
执行结果:事务中的所有命令均可以成功执行!
情景五: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节点上
执行结果:命令有效,成功执行!
情景七:Multiple主键命令包含了多个相同的主键,但该主键不在当前连接的Redis节点上
执行结果:命令有效,返回MOVED信息!
基于以上执行结果,我们可以知道对于MULTI/EXEC事务来说,执行效果与逐条处理单个命令一样,被事务包裹的Redis命令连接节点能够处理就处理,无法处理的就返回MOVED信息。但是对于Multiple主键的命令来说,只要在命令中包含了多个不同的主键,那么无论这些主键能不能被连接节点所处理,命令都是无效的!当然,以上只是通过一些具体的命令执行实例来看Redis Cluster的执行效果,如果想对Redis Cluster的命令处理有更详细的了解,那么推荐的方法还是去看源码中的cluster.c文件。
阅读全文
0 0
- Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制
- Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制
- redis的事务(redis的watch,multi,exec用法)
- Spring Redis 事务Multi Exec Watch
- Redis - 事务(multi,exec,watch,unwatch)
- redis 事务(MULTI 、 EXEC 、 DISCARD 和 WATCH )
- redis cluster 下的命令
- Redis cluster multi-key operation
- multi事务 watch命令
- Redis中multi,exec,watch,发布与订阅模式命令介绍笔记(9)
- redis - cluster命令
- redis cluster安装以及操作
- redis集群的Cluster方式配置以及spring的集成
- redis Cluster 命令 redis-trib.rb 命令
- 结合redis设计与实现的redis源码学习-16-事务(multi.c)
- redis-cluster的搭建
- Redis Cluster的安装
- Redis-Cluster的安装
- Zookeeper学习笔记(六)分布式Barrier
- Boolean对象常用属性及方法详解
- java正则表达式去掉html标签
- 《Thinking In Algorithm》06.Binary search tree(二叉查找树)
- 6行代码将图片显示到MFC图像控件上
- Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制
- java免费视频
- 电梯调度的C语言实现(vc可正常运行)
- Unity16--背景滚动的设置、第一人称视角
- 欧几里得算法模板
- 数据结构图之java实现
- NOIP2009Hankson的趣味题
- 正则表达式
- Elasticsearch 插入索引文档 和特殊的字段类型