По умолчанию для кэша файлов Laravel, если redis не работает

в духе "хаос обезьяна " Я пытаюсь гарантировать, что приложение laravel продолжает работать, даже когда службы, от которых оно зависит, не работают.

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

Я не смог найти четкого примера.

3 ответов


один из способов решить эту проблему-перезаписать значение по умолчанию Laravel Illuminate\Cache\CacheManagerкласс и изменить привязку МОК

class MyCacheManager extends Illuminate\Cache\CacheManager
{
    protected function createRedisDriver(array $config)
    {
        try {
            return parent::createRedisDriver($config);
        } catch (\Exception $e) {
            //Error with redis
            //Maybe there is a more explicit exception ;)
            return $this->resolve('file');
        }
    }
}

в некоторых ServiceProvider

$this->app->singleton('cache', function($app)
{
    return new MyCacheManager($app);
});

это решение также сохранит Cache рабочая фасад :)


кажется, что пакет именно для этого: https://github.com/xtcat/laravel-redis-fallback

Я еще не нашел подобных пакетов для сеансов или очередей. Пожалуйста, поделитесь здесь, Если кто-то есть.


вы не можете просто включить анонимную функцию вместо настройки драйвера кэша cnfig?

Это может попытаться использовать Redis, и если он не возвращает файл в качестве параметра и Redis, если это удастся