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

vwoqyblh  于 8个月前  发布在  Redis
关注(0)|答案(1)|浏览(192)

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

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

错误代码:
redis.exceptions.ResponseError:127.0.0.1:30012
如果我尝试从redis-cli -c -p portofmyinstance设置密钥,有时我会收到一条重定向消息,告诉我密钥存储在哪里。
例如,我知道在get请求的情况下,需要一个智能客户端将请求重定向到正确的节点(持有密钥的节点),否则会发生移动错误。这是同样的情况吗?我需要捕获redis.exceptions.ResponseError并再次尝试设置?

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

我的第一次尝试是在代码之上,但没有解决方案。set操作永远不会成功。
另一方面,下面的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();

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

m2xkgtsf

m2xkgtsf1#

对于一个redis集群,你可以使用普通的redis客户端,只有当你“为某个键找到所属的插槽,然后找到每个主服务器服务的插槽”。有了这些信息,我可以将键设置到正确的节点,而不会出现移动重定向错误。否则需要http://redis-py-cluster.readthedocs.io/en/master/

相关问题