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

本文通过多个情景分析了Redis Cluster中MULTI/EXEC事务及Multiple主键命令的执行情况,揭示了在集群环境下,事务和多键操作的限制与执行规则,包括MOVED错误、部分执行和无效命令等情况。
摘要由CSDN通过智能技术生成

[root@compute-09-00 ~]# /usr/local/redis/bin/redis-cli

redis 127.0.0.1:6379> multi

OK

redis 127.0.0.1:6379> set hello world

QUEUED

redis 127.0.0.1:6379> set hello earth

QUEUED

redis 127.0.0.1:6379> set hello china

QUEUED

redis 127.0.0.1:6379> exec

1) OK

2) OK

3) OK

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

情景二:MULTI/EXEC事务中的所有命令均操作相同的主键,但该主键不在当前连接的Redis节点上

redis 127.0.0.1:6379> multi

OK

redis 127.0.0.1:6379> get foo

(error) MOVED 12182 192.168.32.4:6379

redis 127.0.0.1:6379> set foo bar

(error) MOVED 12182 192.168.32.4:6379

redis 127.0.0.1:6379> exec

(empty list or set)

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

情景三:MULTI/EXEC事务中的所有命令操作不同的主键,且某些主键不在当前连接的Redis节点上

redis 127.0.0.1:6379> multi

OK

redis 127.0.0.1:6379> set hello america

QUEUED

redis 127.0.0.1:6379> set foo rab

(error) MOVED 12182 192.168.32.4:6379

redis 127.0.0.1:6379> exec

1) OK

redis 127.0.0.1:6379> get hello

"america"

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

情景四:MULTI/EXEC事务中的所有命令操作不同的主键,且所有主键均在当前连接的Redis节点上

redis 192.168.32.3:6379> multi

OK

redis 192.168.32.3:6379> set id 10003

QUEUED

redis 192.168.32.3:6379> set number 20004

QUEUED

redis 192.168.32.3:6379> set student

30098

QUEUED

redis 192.168.32.3:6379> exec

1) OK

2) OK

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节点上

redis 192.168.32.3:6379> mset id 10004 id 20005

id 30099

OK

redis 192.168.32.3:6379> mget id id id

1) "30099"

2) "30099"

3) "30099"

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

情景七:Multiple主键命令包含了多个相同的主键,但该主键不在当前连接的Redis节点上

redis 192.168.32.3:6379> mset hello world hello

earth hello universe

(error) MOVED 866 192.168.32.2:6379

redis 192.168.32.3:6379> mget hello hello

hello

(error) MOVED 866 192.168.32.2:6379

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值