QueryCache is a general query result caching system for Eloquent models. It's optimized to be as automated as possible, and can work with Redis and SQLite as caching.
First, publish the configuration file:
php artisan vendor:publish --provider="Grafite\QueryCache\QueryCacheServiceProvider" --tag="config"
Next, add the following to your .env file to configure the package:
QUERY_CACHE_TTL=604800 // 7 days QUERY_CACHE_FLUSH_ON_UPDATE=true QUERY_CACHE_DRIVER=redis QUERY_CACHE_PREFIX=qc QUERY_CACHE_PLAIN_TEXT_KEYS=false QUERY_CACHE_PREVENT_STAMPEDE=false QUERY_CACHE_MEMOIZE=true
The last two options are optional optimizations. QUERY_CACHE_PREVENT_STAMPEDE guards against cache stampedes when many requests miss the cache at the same time, while QUERY_CACHE_MEMOIZE serves repeated identical queries within a single request from memory instead of hitting the cache backend each time.
Next, add the QueryCacheable trait to any Eloquent model you wish to cache queries for.
With the trait added you have access to the following methods:
static bool flushQueryCache(array $tags = []) static bool flushQueryCacheWithTag(string $string) static \Illuminate\Database\Query\Builder|static cacheFor(\DateTime|int|null $time) static \Illuminate\Database\Query\Builder|static cacheForever() static \Illuminate\Database\Query\Builder|static dontCache() static \Illuminate\Database\Query\Builder|static doNotCache() static \Illuminate\Database\Query\Builder|static cacheDriver(string $cacheDriver) static \Illuminate\Database\Query\Builder|static cacheBaseTags(array $tags = [])
By default, QueryCache will flush the cache for a model when it is created, updated, or deleted. This behavior can be disabled by setting QUERY_CACHE_FLUSH_ON_UPDATE to false in your .env file.
If you need to purge the cache manually, you can use the flushQueryCache method on your model.