[英]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.