redis.exceptions.ResponseError:redis set操作中的MOVED错误

时间:2017-04-04 13:07:26

标签: javascript python redis

我创建了一个包含30个实例(15个主服务器/ 15个节点)的Redis群集。使用python代码我连接到这些实例,我找到了主人,然后我想添加一些键给他们。

def settomasters(port, host):
    r = redis.Redis( host=host, port=port )
    r.set("key"+port,"value")

错误:

  

redis.exceptions.ResponseError:MOVED 12539 127.0.0.1:30012

如果我尝试从redis-cli -c -p portofmyinstance设置密钥,有时我会收到一条重定向消息,告知密钥的存储位置。

我知道,例如,在获取请求的情况下,需要智能客户端才能将请求重定向到正确的节点(保存密钥的节点),否则会发生移动的错误。这是同样的情况吗?我需要捕获redis.exceptions.ResponseError并尝试再次设置?

while True:
    try:
        r.set("key","value")
        break
    except:
        print "error"
        pass

我的第一次尝试是在代码之上但没有解决方案。设置操作永远不会成功。

另一方面,下面的代码在javascript中不会抛出错误,我无法弄清楚原因:

var redis = require('redis-stream'),
client = new redis(30001, '127.0.0.1');

// Open stream
var stream = client.stream();

// Example of setting 200 records
for(var record = 0; record <200; record++) {
    var command = ['set', 'qwerty' + record, 'QWERTYUIOP'];  
    stream.redis.write( redis.parse(command) );
}

stream.on('close', function () {
console.log('Completed!');
});

// Close the stream after batch insert
stream.end();

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

使用redis群集时,只有当您找到属于某个密钥的某个密钥,然后找到每个主服务器所使用的插槽时,才能使用普通的redis客户端。有了这些信息,我可以设置正确节点的密钥而不会移动重定向错误。&#34;正如@Antonis所说。否则你需要http://redis-py-cluster.readthedocs.io/en/master/