本着"混沌猴子"的精神,我试图确保 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