aqamarine/laravel-query-cache

基于 'miradnan/laravel-model-caching' 包,该包用于存储数据库查询的缓存,并在创建或更新 Laravel 模型后自动清理缓存。

dev-master 2022-04-09 09:27 UTC

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 包,因为它具有更好的灵活性。

许可证

MIT