2017-06-12 2 views
0

Ich möchte das folgende Szenario auf Redis mit Python durchführen.Wie führe ich einen Befehl im Redis-Cluster-Modus mit Python aus?

Verwenden von Befehlszeile: 1) redis-cli -c 2) redis_prompt >> bekommen some_string

Ich versuchte redis und rediscluster Module verwenden, aber ohne Glück. Im Folgenden sind die Codes, die ich versucht:

1)

r = redis.Redis(host='123.123.123.123', port=6379, db=0) 
r.get('some srting') 

den folgenden Fehler Got:

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. 

Jede Hilfe wäre toll.

+0

Der Port ist 6379 (in Abschnitt 1)? oder 7000 (in Abschnitt 2) – Jacky

+0

@Jacky Ich versuchte mit beiden Ports 6379 und 7000 für Abschnitt 1 und 2. –

+1

Sie müssen sich an den Redis-Administrator wenden, um sicherzustellen, welchen Port zu verwenden. Und ich möchte wissen, welche Ausnahme ausgelöst wird, wenn ich in Abschnitt 2 den Port auf 6379 setze. Beachten Sie, dass der Port auf eine Zahl anstatt auf einen String gesetzt wird. – Jacky

Antwort

0

Ok, so dass dieser Fehler bedeutet eine der folgenden Möglichkeiten:

  • In diesen Zeilen Code (1):

    r = redis.Redis(host='123.123.123.123', port=6379, db=0) 
    
    r.get('some srting') 
    

    Sie versuchen, den Schlüssel "einiger Stachel" von Wirt zu holen 123.123.123.123 und Port 6379. Der Fehler redis.exceptions.ResponseError: MOVED 9442 172.16.176.36:6380 bedeutet, dass dieser Schlüssel in 172.16.176.36:6380 liegt. Versuchen Sie also, sich zu verbinden. /redis-cli -c -p 6380 in diesem Knoten und dann CLUSTER GETKEYSINSLOT 6380 3 ausführen, um zu sehen, ob dieser Schlüssel tatsächlich hier ist.

  • Von (2) dieser Fehler: rediscluster.exceptions.RedisClusterException: Redis Cluster cannot be connected. Please provide at least one reachable node bedeutet, dass etwas mit dem Cluster nicht stimmt. Vielleicht haben Sie die Initialisierung nicht korrigiert.

    Zuerst in /home/{{user}}/redis-yourversion/utils/create-cluster Sie finden create-cluster.sh. Richten Sie Port und Host und Knoten ein und führen Sie dann ./create-cluster start./create-cluster-create aus. Aber zuerst müssen Sie Redis-Server im Cluster-Modus starten. Gehen Sie zu redis.conf und in die Konfigurationsparameter, die Sie sehen werden cluster-enabled no. Richten Sie auf ja ein. Danach müssen Sie ./redis-server ../redis.conf ausführen (Geben Sie den Pfad für redis.conf). Wenn diese Option aktiviert Cluster korrekt ist, werden Sie Running in cluster mode

wichtige Sache zu erinnern sehen:

Der Parameter -c in Terminal bedeutet, dass redis Knoten die Umleitungen ausführen kann und die richtigen Knoten finden, dass der Schlüssel gehört ohne VERSCHOBEN Fehler. Wenn Sie einen Treiber haben, nehmen Sie in Python an, die Knoten zu manipulieren und Schlüssel oder was auch immer zu holen, müssen Sie diese Umleitungen selbst verwalten.

Verwandte Themen