Убедитесь, что Redis не работает [дубликат]

18
задан Kartik Rokde 12 October 2012 в 11:59
поделиться

4 ответа

Как вы сказали, соединение с сервером Redis установлено только при попытке выполнить команду на сервере. Если вы не хотите идти вперед, не проверяя, что сервер доступен, вы можете просто отправить случайный запрос на сервер и проверить ответ. Что-то вроде:

try:
    response = rs.client_list()
except redis.ConnectionError:
    #your error handlig code here    
12
ответ дан Catalin Luta 3 September 2018 в 17:01
поделиться

Здесь уже есть хорошие решения, но вот мой быстрый и грязный для 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 перезагружает и по-прежнему загружает файл .rdb, содержащий записи кэша на диске, тогда он будет бросать BusyLoadingError, хотя это базовый класс - ConnectionError, поэтому прекрасно его поймать.

Вы также можете просто исключить из redis.exceptions.RedisError, который является базовым классом всех исключений redis.

Другой вариант, в зависимости от ваших потребностей, заключается в создании функций get и set, которые ловят исключения ConnectionError при настройке / получении значений. Затем вы можете продолжать или ждать или что-то еще, что вам нужно сделать (поднять новое исключение или просто выбросить более полезное сообщение об ошибке).

Это может не сработать, если вы абсолютно зависите от установки / получения значений кеша (для моих целей, если кеш отключен для всех, что мы обычно должны «продолжать»), и в этом случае это может иметь смысл иметь исключения и позволить программе / сценарию умереть и вернуть сервер / службу redis в состояние достижимости.

9
ответ дан Kasapo 3 September 2018 в 17:01
поделиться

Официальным способом проверки доступности сервера redis является ping ( http://redis.io/topics/quickstart ).

Одно из решений заключается в подклассе redis и do 2 вещи:

  1. проверить соединение при инстанцировании
  2. записать обработчик исключений в случае отсутствия связи при выполнении запросов
23
ответ дан Lloyd Moore 3 September 2018 в 17:01
поделиться

Вы можете использовать команду ping, чтобы проверить, активно ли соединение ....

.. но соединение может по-прежнему сбой сразу после проверки, поэтому вы не собираетесь исключать ConnectionError исключения. Если вы просто хотите проверить один раз при запуске, то ping это хороший способ сделать это.

4
ответ дан Sripathi Krishnan 3 September 2018 в 17:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: