[英]Python redis library not working unlike command line
I have a remote Linux Redis 7.0 server which I reach through a spiped tunnel.我有一个远程 Linux Redis 7.0 服务器,我通过 spiped 隧道到达它。
Launch spiped locally:在本地启动 spiped:
spiped -F -e -s 127.0.0.1:6379 -t REMOTESERVER:6379 -k /etc/spiped/redis.key
and as expected I can connect to the remote Redis server via the command line utility:正如预期的那样,我可以通过命令行实用程序连接到远程 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
So all as expected.所以一切如预期。 So tried the very simple python program:所以尝试了非常简单的 python 程序:
import redis
r = redis.Redis(host='MYSERVERIP', port=6379, password='myverysecretpassphrase')
r.set('foo', 'bar')
value = r.get('foo')
print(value)
but get a long error trace:但得到很长的错误跟踪:
(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.
Here is my environment:这是我的环境:
# 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
Just to exclude typos, are you actually replacing MYSERVERIP
with 127.0.0.1
?只是为了排除拼写错误,您实际上是用127.0.0.1
替换MYSERVERIP
吗? If not, that may be the cause of the issue - as the remote Redis server would be tunneled through 127.0.0.1:6379
, according to your spiped command line.如果不是,那可能是问题的原因 - 因为远程 Redis 服务器将通过127.0.0.1:6379
进行隧道传输,根据您的 spiped 命令行。
So that should read instead:所以应该改为:
r = redis.Redis(host='127.0.0.1', port=6379, password='myverysecretpassphrase')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.