Python-如何检查Redis Server是否可用

问题描述 投票:0回答:7

打印以下

<redis.client.Redis object at 0x120ba50>

即使我的Redis服务器未运行。 

我发现我的python代码仅在我使用redis实例进行

SET()或
Get()
时才连接到服务器。

因此,我不希望使用我的班级的其他服务来获得例外说

redis.exceptions.ConnectionError: Error 111 connecting localhost:6379. Connection refused. 我想返回正确的消息/错误代码。我该怎么做?

如果您想在启动时测试redis连接,请使用

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()
python redis
7个回答
59
投票

注 - 执行测试后,连接仍然可能失败,因此这不会掩盖以后的超时异常。 


官方检查REDIS服务器的可用性是否为ping(

http://redis.io/topics/quickstart
)。

一种解决方案是子类重新进行并做2件事:
  • 检查Intantiation的连接
在提出请求时没有连接性的情况下,请写一个例外处理程序。

36
投票

正如您说的那样,仅当您尝试在服务器上执行命令时,才建立了与Redis服务器的连接。如果您不想在不检查服务器可用的情况下向前前进,则只需将随机查询发送到服务器并检查响应即可。类似: try: response = rs.client_list() except redis.ConnectionError: #your error handlig code here

    这里已经有了很好的解决方案,但是这是我对Django_redis的快速而肮脏的,它似乎不包含ping功能(尽管我使用的是旧版本的django版本,并且无法使用最新的django_redis)。
  1. # 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
  2. 这个似乎很好。请注意,如果Redis正在重新启动并仍在加载将缓存条目保存在磁盘上的.RDB文件,则它将抛出HusyLoadingingError,尽管它的基类是ConnectionError,因此可以抓住它是很好的。
  3. 除了
redis.exceptions.RedisError

19
投票

其他选项,取决于您的需求,是创建和设置在设置/获取值时捕获ConnectionError异常的获取和设置功能。然后,您可以继续或等待或需要做的任何事情(提出新的异常,或者抛出更有用的错误消息)。

如果您绝对依赖设置/获得缓存值(出于我的目的,如果缓存对我们通常必须“继续前进”的措施都离线)可能无法正常工作),在这种情况下,有有意义的例外并让程序/脚本死去并使Redis Server/Service恢复到可及的状态。 

16
投票
我也从插座库中遇到了一个

ConnectionRefusedError

,当REDIS不运行时,我必须将其添加到可用性检查中。
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


13
投票

使用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或CMD

8
投票
where 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

5
投票

netstat -an | findstr 6379

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.