Как указать predis продолжать работу при ошибке

В случае сбоя Redis можно ли указать php predis (https://github.com/nrk/predis) продолжать и не умирать?

У меня есть Redis для обработки кеша приложения, но приложение может работать и без кеша, просто сильнее нагружает базу данных. Я предпочитаю откат к базе данных, а затем приложение умирает. Я не могу найти способ указать predis продолжать работу в случае сбоя.

Я думал, что нужно установить ограничение на подключение примерно на 5 секунд, если оно не может подключиться к Redis, приложение должно продолжать работу.

Это возможно?

Fatal error: Uncaught Predis\Connection\ConnectionException: Operation timed out [tcp://128.0.0.1:6379]

person AFRC    schedule 29.10.2019    source источник
comment
Разве вы не можете просто попробовать поймать часть redis, и если redis не удастся, просто продолжить обычный код без кэширования?   -  person Elad    schedule 13.11.2019
comment
просто используйте блок try-catch   -  person Md. Miraj Khan    schedule 15.11.2019


Ответы (1)


Вы можете поймать исключение соединения и вернуться к своей базе данных. Пример:

try {
    return $predis->get('foobar');
} catch(\Predis\Connection\ConnectionException $ex) {
    // fallback to database call
}

Для более чистого кода оберните вызов базы данных/redis в новый класс, который абстрагирует фактическое соединение, таким образом, вашему вызывающему коду не нужно заботиться о том, какой источник данных использовался.

person Leif Högberg    schedule 14.11.2019
comment
Кроме того, вместо $predis->get('foobar'); вы можете сделать $predis->ping();, что означает, что вам не нужно знать имена ключей. - person Redzarf; 19.11.2019