我想使用python在redis上执行以下场景。
使用命令行: 1)redis-cli -c 2) redis_prompt >> 获取some_string
我尝试使用 redis 和 rediscluster 模块,但没有成功。以下是我尝试过的代码:
1)
r = redis.Redis(host='123.123.123.123', port=6379, db=0)
r.get('some srting')
出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\redis\client.py", line 880, in get
return self.execute_command('GET', name)
File "C:\Python27\lib\site-packages\redis\client.py", line 573, in execute_command
return self.parse_response(connection, command_name, **options)
File "C:\Python27\lib\site-packages\redis\client.py", line 585, in parse_response
response = connection.read_response()
File "C:\Python27\lib\site-packages\redis\connection.py", line 582, in read_response
raise response
redis.exceptions.ResponseError: MOVED 9442 172.16.176.36:6380
2)
from rediscluster import StrictRedisCluster
startup_nodes = [{"host": "123.123.123.123", "port": "7000"}]
rc_readonly = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True, readonly_mode=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\rediscluster\client.py", line 181, in __init__
**kwargs
File "C:\Python27\lib\site-packages\rediscluster\connection.py", line 353, in __init__
**connection_kwargs)
File "C:\Python27\lib\site-packages\rediscluster\connection.py", line 141, in __init__
self.nodes.initialize()
File "C:\Python27\lib\site-packages\rediscluster\nodemanager.py", line 240, in initialize
raise RedisClusterException("Redis Cluster cannot be connected. Please provide at least one reachable node.")
rediscluster.exceptions.RedisClusterException: Redis Cluster cannot be connected. Please provide at least one reachable node.
任何帮助都会很棒。
最佳答案
好的,所以这个错误意味着以下之一:
在这些代码行 (1) 中:
r = redis.Redis(host='123.123.123.123', port=6379, db=0) r.get('some srting')
您尝试从主机
123.123.123.123
获取 key “some sting”并且 端口6379
。错误redis.exceptions.ResponseError: MOVED 9442 172.16.176.36:6380
表示此 key 位于172.16.176.36:6380
。因此尝试在该节点中使用 ./redis-cli -c -p 6380
进行连接,然后 执行CLUSTER GETKEYSINSLOT 6380 3
看看这个键是否真的是 在这里。来自 (2) 此错误:
rediscluster.exceptions.RedisClusterException:无法连接 Redis 集群。 Please provide at least an reachable node
表示集群有问题。也许,你没有正确初始化。首先在
/home/{{user}}/redis-yourversion/utils/create-cluster
你 将找到create-cluster.sh
。设置端口和主机和节点,然后 执行./create-cluster start
./create-cluster-create
。但首先你 必须以集群模式启动redis服务器。转到 redis.conf 并在 您将看到cluster-enabled no
的配置参数。设置 是的。在此之后你必须运行./redis-server ../redis.conf
(给 redis.conf 的路径)。如果集群启用正确,您将看到Running in cluster mode
重要的事情要记住:
终端中的参数-c表示redis节点可以执行重定向并找到key所属的正确节点而不会出现MOVED错误。如果你有一个驱动程序假设在 python 中操作节点和获取 key 或任何你必须自己管理这些重定向。
关于python - 如何使用python在redis集群模式下执行get命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44496769/