我正在开发一个用于访问Redis Server的Python服务(类).我想知道如何检查Redis Server是否正在运行.而且如果不知何故我无法连接到它.
这是我的代码的一部分
import redis
rs = redis.Redis("localhost")
print rs
Run Code Online (Sandbox Code Playgroud)
它打印以下内容
<redis.client.Redis object at 0x120ba50>
Run Code Online (Sandbox Code Playgroud)
即使我的Redis服务器没有运行.
当我发现我的Python代码仅在我使用redis实例执行set()或get()时才连接到Server .
因此,我不希望使用我的类的其他服务获得异常说法
redis.exceptions.ConnectionError: Error 111 connecting localhost:6379. Connection refused.
Run Code Online (Sandbox Code Playgroud)
我想返回正确的消息/错误代码.我怎样才能做到这一点??
Llo*_*ore 29
检查redis服务器可用性是否为ping的官方方法(http://redis.io/topics/quickstart).
一种解决方案是将redis子类化并做两件事:
Cat*_*uta 16
如上所述,只有在尝试在服务器上执行命令时,才会建立与Redis服务器的连接.如果您不想在没有检查服务器可用的情况下前进,您可以向服务器发送随机查询并检查响应.就像是 :
try:
response = rs.client_list()
except redis.ConnectionError:
#your error handlig code here
Run Code Online (Sandbox Code Playgroud)
Kas*_*apo 14
这里已经有了很好的解决方案,但这里是我的快速和脏的django_redis似乎不包括ping函数(虽然我使用的是较旧版本的django而且不能使用最新的django_redis).
# 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
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好.请注意,如果redis正在重新启动并仍然加载保存磁盘上缓存条目的.rdb文件,那么它将抛出BusyLoadingError,尽管它的基类是ConnectionError,因此可以捕获它.
您也可以简单地除了redis.exceptions.RedisError所有redis异常的基类.
根据您的需要,另一个选项是创建get和set函数,以便在设置/获取值时捕获ConnectionError异常.然后你可以继续或等待或者你需要做什么(引发一个新的异常或者只是抛出一个更有用的错误信息).
如果你完全依赖于设置/获取缓存值(对于我的目的,如果缓存离线,我们通常必须"继续"),这可能不会很好.在这种情况下,拥有异常可能是有意义的,并让程序/脚本死掉并将redis服务器/服务恢复到可达状态.
Sri*_*nan 12
您可以使用该ping()命令检查连接是否处于活动状态....
..但是检查后连接仍然可能失败,因此您不会消除ConnectionError异常.如果您只想在启动时检查一次,那么这ping()是一个很好的方法.
hex*_*are 12
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!")
Run Code Online (Sandbox Code Playgroud)
可以通过对服务器执行 ping 命令来检查 Redis 服务器连接。
>>> import redis
>>> r = redis.Redis(host="127.0.0.1", port="6379")
>>> r.ping()
True
Run Code Online (Sandbox Code Playgroud)
使用该ping方法,我们可以处理重新连接等。为了了解连接错误的原因,可以按照其他答案中的建议使用异常处理。
try:
is_connected = r.ping()
except redis.ConnectionError:
# handle error
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48239 次 |
| 最近记录: |