Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default to Laravel File cache if redis is down

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.

like image 555
evandentremont Avatar asked Jan 20 '15 14:01

evandentremont


1 Answers

One way to solve this problem is to overwrite Laravel's default Illuminate\Cache\CacheManagerclass and alter the ioc binding

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');
        }
    }
}

In some ServiceProvider

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

This solution will also keep the Cache facade working :)

like image 121
Jan P. Avatar answered Sep 30 '22 13:09

Jan P.