Skip to content

Eloquent 查询缓存

使用 renoki-co/laravel-eloquent-query-cache 可以使得模型查询时添加缓存变得轻而易举。

安装

使用下面的命令将扩展包安装到项目中:

bash
# using adapt laravel 11
composer config repositories.rennokki/laravel-eluquent-query-cache github https://github.com/curder/laravel-eloquent-query-cache.git

composer require rennokki/laravel-eloquent-query-cache:dev-adapt-laravel-11
bash
composer require rennokki/laravel-eloquent-query-cache

在模型文件中通过使用 \Rennokki\QueryCache\Traits\QueryCacheable trait 来应用它。

php
use Rennokki\QueryCache\Traits\QueryCacheable;

class Post extends Model
{
    use QueryCacheable;
    
    public int|\DateTime $cacheFor = -1;
}

自定义配置

缓存时间 $cacheFor

指定查询缓存的有效时间,单位秒。不要指定值或将其设置为 null 会禁用缓存。

php
public int|\DateTime $cacheFor = -1; // -1 为永久有效

也可以通过编写 valueForValue() 方法来自定义缓存有效时间的返回值。

php
public function cacheForValue(): int|DateTime
{
    return -1;
}

缓存标签 $cacheTags

查询缓存的标签。当需要仅刷新特定标签的缓存可以对其设置对应标签。

php
public ?array $cacheTags = ['posts'];

也可以通过 cacheTagsValue() 方法来自定义缓存标签。

php
public function cacheTagsValue(): array
{
    return [];
}

缓存前缀 $cachePrefix

设置定义的缓存前缀。

php
public string $cachePrefix = 'posts_';

也可以通过 cachePrefixValue() 方法来自定义缓存前缀。

php
public function cachePrefixValue(): string
{
    return class_basename(static::class);
}

缓存驱动 $cacheDriver

指定缓存驱动,比如redis,具体可以查看这里

php
public string $cacheDriver = 'redis';

也可以通过 cacheDriverValue() 方法来自定义缓存驱动。

php
public function cacheDriverValue(): string
{
    return 'redis';
}

缓存键规则 $cacheUsePlainKey

自定义明文的缓存键,而不是使用使用 sha256 函数生成。

php
public bool $cacheUsePlainKey = false;

也可以通过 cacheUsePlainKeyValue() 方法来自定义明文的缓存键。

php
public function cacheUsePlainKeyValue(): bool
{
    return false;
}

自动更新缓存

php
protected static bool $flushCacheOnUpdate = true;