簡體   English   中英

Python redis 與命令行不同,庫無法正常工作

[英]Python redis library not working unlike command line

我有一個遠程 Linux Redis 7.0 服務器,我通過 spiped 隧道到達它。

在本地啟動 spiped:

spiped -F -e -s 127.0.0.1:6379 -t REMOTESERVER:6379 -k /etc/spiped/redis.key

正如預期的那樣,我可以通過命令行實用程序連接到遠程 Redis 服務器:

(redis_test) bob@Roberts-Mac-mini redis_test % redis-cli      
127.0.0.1:6379> AUTH myverysecretpassphrase
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> exit

所以一切如預期。 所以嘗試了非常簡單的 python 程序:

import redis

r = redis.Redis(host='MYSERVERIP', port=6379, password='myverysecretpassphrase')

r.set('foo', 'bar')
value = r.get('foo')
print(value)

但得到很長的錯誤跟蹤:

(redis_test) bob@Roberts-Mac-mini redis_test % python test1.py 
Traceback (most recent call last):
  File "/Users/bob/Documents/work/redis_test/test1.py", line 8, in <module>
    r.set('foo', 'bar')
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/commands/core.py", line 2238, in set
    return self.execute_command("SET", *pieces, **options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/client.py", line 1255, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 1389, in get_connection
    connection.connect()
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 610, in connect
    self.on_connect()
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 701, in on_connect
    auth_response = self.read_response()
                    ^^^^^^^^^^^^^^^^^^^^
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 812, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 318, in read_response
    raw = self._buffer.readline()
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 249, in readline
    self._read_from_socket()
  File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 195, in _read_from_socket
    raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Connection closed by server.

這是我的環境:

# packages in environment at /Users/bob/opt/miniconda3/envs/redis_test:
redis-py                  4.4.0              pyhd8ed1ab_0    conda-forge
(redis_test) bob@Roberts-Mac-mini redis_test % python --version
Python 3.11.0

只是為了排除拼寫錯誤,您實際上是用127.0.0.1替換MYSERVERIP嗎? 如果不是,那可能是問題的原因 - 因為遠程 Redis 服務器將通過127.0.0.1:6379進行隧道傳輸,根據您的 spiped 命令行。

所以應該改為:

r = redis.Redis(host='127.0.0.1', port=6379, password='myverysecretpassphrase')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM