In the spirit of “chaos monkey” I’m trying to ensure that a laravel application keeps going even when the services it depends on are down.
It uses a DB for primary storage, and a redis cache. What I’d like to do is have it automatically fall back to the file cache if and when redis fails.
I haven’t been able to find a clear example.
Advertisement
Answer
One way to solve this problem is to overwrite Laravel’s default IlluminateCacheCacheManager
class and alter the ioc binding
class MyCacheManager extends IlluminateCacheCacheManager { 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'); } } }
In some ServiceProvider
$this->app->singleton('cache', function($app) { return new MyCacheManager($app); });
This solution will also keep the Cache
facade working 🙂