打印以下
<redis.client.Redis object at 0x120ba50>
即使我的Redis服务器未运行。
我发现我的python代码仅在我使用redis实例进行
SET()或Get()时才连接到服务器。
因此,我不希望使用我的班级的其他服务来获得例外说
redis.exceptions.ConnectionError: Error 111 connecting localhost:6379. Connection refused.
我想返回正确的消息/错误代码。我该怎么做?
ping()
from redis import Redis
redis_host = '127.0.0.1'
r = Redis(redis_host, socket_connect_timeout=1) # short timeout for the test
r.ping()
print('connected to redis "{}"'.format(redis_host))
命令
ping()
注 - 执行测试后,连接仍然可能失败,因此这不会掩盖以后的超时异常。
官方检查REDIS服务器的可用性是否为ping(
http://redis.io/topics/quickstart)。 一种解决方案是子类重新进行并做2件事:
正如您说的那样,仅当您尝试在服务器上执行命令时,才建立了与Redis服务器的连接。如果您不想在不检查服务器可用的情况下向前前进,则只需将随机查询发送到服务器并检查响应即可。类似:
try:
response = rs.client_list()
except redis.ConnectionError:
#your error handlig code here
# assuming rs is your redis connection
def is_redis_available():
# ... get redis connection here, or pass it in. up to you.
try:
rs.get(None) # getting None returns None or throws an exception
except (redis.exceptions.ConnectionError,
redis.exceptions.BusyLoadingError):
return False
return True
redis.exceptions.RedisError
其他选项,取决于您的需求,是创建和设置在设置/获取值时捕获ConnectionError异常的获取和设置功能。然后,您可以继续或等待或需要做的任何事情(提出新的异常,或者抛出更有用的错误消息)。
如果您绝对依赖设置/获得缓存值(出于我的目的,如果缓存对我们通常必须“继续前进”的措施都离线)可能无法正常工作),在这种情况下,有有意义的例外并让程序/脚本死去并使Redis Server/Service恢复到可及的状态。
ConnectionRefusedError
r = redis.Redis(host='localhost',port=6379,db=0)
def is_redis_available(r):
try:
r.ping()
print("Successfully connected to redis")
except (redis.exceptions.ConnectionError, ConnectionRefusedError):
print("Redis connection error!")
return False
return True
if is_redis_available(r):
print("Yay!")
REDIS服务器连接可以通过执行ping命令到服务器来检查。
>>> import redis
>>> r = redis.Redis(host="127.0.0.1", port="6379")
>>> r.ping()
True
使用ping
try:
is_connected = r.ping()
except redis.ConnectionError:
# handle error
使用ping()
from redis import Redis
conn_pool = Redis(redis_host)
# Connection=Redis<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
try:
conn_pool.ping()
print('Successfully connected to redis')
except redis.exceptions.ConnectionError as r_con_error:
print('Redis connection error')
# handle exception
Redis可以安装在其他位置。要查找REDIS安装的位置,请在PowerShell或CMDwhere redis-server
现在,在管理员中打开PowerShell,然后启动Redis服务器:
redis-server
python中的redis连接创建一个python文件,并添加以下代码以检查REDIS正在运行:
from redis import Redis
host_ = '127.0.0.1'
R = Redis(host=host_,socket_connect_timeout=1, port=6379)
R.ping()
print(f"Redis Connected To :{host_}")
Expected Output : Redis Connected To :127.0.0.1
netstat -an | findstr 6379