默认为 Laravel 如果 redis 关闭则文件缓存

Default to Laravel File cache if redis is down

本着“chaos monkey”的精神,我正在努力确保 laravel 应用程序即使在它所依赖的服务出现故障时也能继续运行。

它使用一个数据库作为主存储,以及一个redis 缓存。我想做的是让它在 redis 失败时自动回退到文件缓存。

我没能找到一个明确的例子。

解决此问题的一种方法是覆盖 Laravel 的默认值 Illuminate\Cache\CacheManagerclass 并更改 ioc 绑定

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,如果失败 return 文件作为设置,如果成功则使用 Redis

我刚刚创建了一个解决这个问题的包:https://github.com/mathieu-bour/laravel-cache-fallback,如果问题仍然相关的话。