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


Default to Laravel File cache if redis is down

本着"混沌猴子"的精神,我试图确保 laravel 应用程序即使在它所依赖的服务关闭时也能继续运行。

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

我找不到一个明显的例子。

解决此问题

的一种方法是覆盖 Laravel 的默认 Illuminate'Cache'CacheManager 类并更改 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');
        }
    }
}

在某些服务提供商中

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

该解决方案还将保持Cache立面正常工作:)

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

似乎有一个完全适合此的包:https://github.com/xtcat/laravel-redis-fallback

我还没有找到类似的会话或队列包。如果有人有,请在这里分享。

您不能只包含一个匿名函数来代替缓存驱动程序 cnfig 设置吗?

可以尝试使用 Redis 如果失败,则返回文件作为设置,如果成功,则返回 Redis