在 "混沌猴" 的精神下,我正在尝试确保 Laravel 应用程序即使依赖的服务停止也能继续运行。
它使用 DB 进行主要存储,以及 Redis 缓存。我想要做的是,当 Redis 失败时,自动切换到文件缓存。
我还没有找到清晰的示例。
它使用 DB 进行主要存储,以及 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');
}
}
}
在一些ServiceProvider中
$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
我还没有找到类似的会话或队列软件包。如果有人知道,请在这里分享。
你能否在缓存驱动器配置设置的位置包含一个匿名函数呢?
该函数可以尝试使用Redis,如果失败则返回文件作为设置,如果成功则返回Redis。