Allow Laravel cache connections to fallback to more stable drivers.
This package is especially useful when you want your application to be fault-tolerant. For example, when using a Redis instance as cache store, you may want to be able to fallback to file store if the Redis instance is unavailable.
This package follows the Semantic Versioning specification.
This package was inspired by fingo/laravel-cache-fallback, even if it is not maintained anymore.
- PHP >= 7.1.3
- Laravel/Lumen 5.8, 6.x, 7.x or 8.x
This package support most of the cache methods (e.g. get, put, etc.). The tagged cache is not supported at the moment.
This package was tested against the following matrix:
Laravel/Lumen | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 |
---|---|---|---|---|---|
5.8 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
6.0 | ❌ | ✔️ | ✔️ | ✔️ | ❌ |
7.0 | ❌ | ✔️ | ✔️ | ✔️ | ❌ |
8.0 | ❌ | ❌ | ✔️ | ✔️ | ✔️ |
Simply add mathieu-bour/laravel-cache-fallback
to your package dependencies.
composer require mathieu-bour/laravel-cache-fallback
This package does not publish any resource and its configuration directly handled in the config/cache.php
file.
This package uses Laravel Package Discovery, so you do need to do anything more.
If you have disabled this feature, you can register the service provider in the config/app.php
.
Register the service provider in the bootstrap/app.php
file like so:
$app->register(Windy\CacheFallback\CacheFallbackServiceProvider::class);
Each cache store can now have a fallback
key in its configuration.
If during execution, the cache driver throws an exception, the fallback driver will be used instead.
<?php
return [
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'redis' => [
'driver' => 'redis',
'connection' => env('CACHE_REDIS_CONNECTION', 'cache'),
'fallback' => 'file',
],
],
];
In this example, the redis
store fallbacks to file
.
If there is no fallback
defined, the original exception will be raised as usual.
Note that this package does not provide any way to cycle through stores: if A fallbacks to B and B fallbacks to A, B will throw the exception immediately.