简体   繁体   English

Python redis 与命令行不同,库无法正常工作

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM