python - 如何使用python在redis集群模式下执行get命令?

标签 python redis

我想使用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/

相关文章:

python - Pandas 比 numpy 慢得多?

python - 当我运行代码时,他们告诉我 "int"对象在第 4 行不可调用

go - 如何优雅地在 Golang 中制作配置文件?

utf-8 - 如何使用redis-cli将utf-8字符设置到redis中?

c# - 分布式锁不适用于RedLock.net

python - 在 flask 中重定向时发出 POST 请求

python - 在python中获取文件的自定义属性

python - iPython notebook 中的 PySpark 在使用 count() 和 first() 时引发 Py4JJavaError

java - Jedis断管异常

Redis 客户端未通过 HAProxy 连接到 Redis 服务器