标签: rediscluster命令处理 | 分类:IT那点事儿说起来却也又臭又长 |
情景一:MULTI/EXEC事务中的所有命令均操作相同的主键,且该主键就在当前连接的Redis节点上
[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 student30098
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 number20005 student 30099
(error) ERR Multi keys request invalid in cluster
redis 192.168.32.3:6379> mget id numberstudent
(error) ERR Multi keys request invalid in cluster
执行结果:命令无效,无法执行!
情景六:Multiple主键命令包含了多个相同的主键,且该主键在当前连接的Redis节点上
redis 192.168.32.3:6379> mset id 10004 id 20005id 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 helloearth hello universe
(error) MOVED 866 192.168.32.2:6379
redis 192.168.32.3:6379> mget hello hellohello
(error) MOVED 866 192.168.32.2:6379
执行结果:命令有效,返回MOVED信息!