aqamarine / laravel-query-cache
基于 'miradnan/laravel-model-caching' 包,该包用于存储数据库查询的缓存,并在创建或更新 Laravel 模型后自动清理缓存。
dev-master
2022-04-09 09:27 UTC
Requires
- php: ^7.3|^8.0
- illuminate/database: ^6.0|^7.30|^8.0|^9.0
- illuminate/support: ^6.0|^7.30|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-09 15:01:10 UTC
README
基于 miradnan/laravel-model-caching 包,该包用于存储数据库查询的缓存,并在创建或更新 Laravel 模型后自动清理缓存。
安装
使用包管理器 composer。
$ composer require aqamarine/laravel-query-cache
用法
为了让包正常工作,您的缓存驱动程序必须支持 '标签'
将 QueryCacheable 特性添加到模型以使其可缓存。
use Aqamarine228\LaravelQueryCache\QueryCacheable; class Categories extends Model { use QueryCacheable; ... }
为了缓存所有模型查询,您需要设置 '$cacheFor' 模型属性。
public $cacheFor = 3600;
或者您可以根据以下示例仅缓存特定的查询。
$category = Category::cacheFor(60 * 60)->first(); // or $category = Category::cacheForever()->first(); // Using a DateTime instance like Carbon works perfectly fine! $category = Category::cacheFor(now()->addDays(1))->first();
缓存标签
此包会自动将表名标签添加到每个缓存查询中,但您可以通过设置 'cacheTags' 模型属性来自定义此行为。
public $cacheTags = ['customTag'];
它将用属性值替换每个缓存查询的默认标签。
或者您可以使用标签,如 miradnan/laravel-model-caching README 中所述
如果用于构建器查询,如以下示例所示,缓存不会被自动清理
$shelfOneBooks = Book::whereShelf(1)->cacheFor(60)->cacheTags(['shelf:1'])->get();
因此您需要手动清理它
Book::flushQueryCache(['shelf:1']);
关系缓存、缓存键、缓存驱动程序、禁用缓存及其等效方法和变量
主题与 miradnan/laravel-model-caching README 中的相同。
自定义
因为在这个包中只使用了 miradnan/laravel-model-caching 包的一部分,所以所有自定义可能性都被切除了。
可能的冲突
Package QueryCacheable 特性重新编写了已删除和已保存的模型事件,并使用自定义 CacheBuilder。因此,执行相同操作的每个包都将发生冲突。为了避免冲突,您应该使用 miradnan/laravel-model-caching 包,因为它具有更好的灵活性。