代码之家  ›  专栏  ›  技术社区  ›  user3541631

检查Redis是否关闭[复制]

  •  0
  • user3541631  · 技术社区  · 6 年前

    我正在开发一个Python服务(类),用于访问Redis服务器。我想知道如何检查Redis服务器是否正在运行。而且如果我不知何故无法连接到它。

    这是我的一部分代码

    import redis
    rs = redis.Redis("localhost")
    print rs
    

    它打印了以下内容

    <redis.client.Redis object at 0x120ba50>
    

    我发现我的Python代码只有在执行 设置() 我的redis实例。

    redis.exceptions.ConnectionError: Error 111 connecting localhost:6379. Connection refused.
    

    我想返回正确的消息/错误代码。我怎么能做到呢??

    0 回复  |  直到 12 年前
        1
  •  34
  •   Lloyd Moore    12 年前

    检查redis服务器可用性的官方方法是ping( http://redis.io/topics/quickstart

    一种解决方案是将redis子类化,并做两件事:

    1. 在实例化时检查连接
        2
  •  21
  •   Jossef Harush Kadouri    5 年前

    如果要在启动时测试一次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)) 
    

    命令

    • 注意-执行测试后连接可能仍然失败,因此这不会掩盖以后的超时异常。
        3
  •  17
  •   Catalin Luta    11 年前

    正如您所说,只有当您尝试在服务器上执行命令时,才会建立到Redis服务器的连接。如果您不想在不检查服务器是否可用的情况下继续前进,您可以向服务器发送一个随机查询并检查响应。比如:

    try:
        response = rs.client_list()
    except redis.ConnectionError:
        #your error handlig code here    
    
        4
  •  14
  •   Kasapo    9 年前

    这里已经有了很好的解决方案,但这里是我的快速和肮脏的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
    

    您也可以简单地,但在 redis.exceptions.RedisError 它是所有redis异常的基类。

    另一个选项,根据您的需要,是创建get和set函数,在设置/获取值时捕捉ConnectionError异常。然后,您可以继续或等待或做任何您需要做的事情(引发一个新的异常或抛出一个更有用的错误消息)。

        5
  •  2
  •   Yogesh Yadav    5 年前

    使用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
    
        6
  •  0
  •   hexerei software    4 年前

    我也遇到过 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!")