如果redis宕机,将默认使用Laravel文件缓存

10
在 "混沌猴" 的精神下,我正在尝试确保 Laravel 应用程序即使依赖的服务停止也能继续运行。
它使用 DB 进行主要存储,以及 Redis 缓存。我想要做的是,当 Redis 失败时,自动切换到文件缓存。
我还没有找到清晰的示例。
4个回答

17

解决此问题的一种方法是覆盖 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');
        }
    }
}

在一些ServiceProvider中

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

这种解决方案也将使Cache门面继续工作 :)


还有一个可以帮助解决这个问题的包:https://github.com/fingo/laravel-cache-fallback - service-paradis

0

-1

有趣。看起来比我的问题更新,值得一看。 - user1393215
@Scott C,你找到解决方案了吗?我也在寻找同样的东西,但是我找不到任何答案:( - ctf0
还没有。仍然在我的待办列表上。 - Scott C
这个包还可以让缓存和会话拥有多个备选方案,非常有趣:https://github.com/fingo/laravel-cache-fallback / https://github.com/fingo/laravel-session-fallback - service-paradis

-1

你能否在缓存驱动器配置设置的位置包含一个匿名函数呢?

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


2
这更像是对问题的评论,而不是新的答案。 - slfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接