elipzis/laravel-cacheable-model

Laravel应用的自动查询模型缓存

v0.4.1 2024-07-09 07:54 UTC

This package is auto-updated.

Last update: 2024-09-23 13:34:31 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

为您的Eloquent模型提供简单自动的select-query缓存!

  • 获取缓存的查询结果并自动减少数据库负载
  • 配置TTL、前缀、唯一查询等。
  • 无需手动缓存调用
  • 在更新、插入或删除时自动清除缓存

您可以通过添加特性将任何Eloquent模型设置为可缓存

...
use ElipZis\Cacheable\Models\Traits\Cacheable;
...

class YourModel extends Model {

    use Cacheable;
    ... 

并利用Redis、memcached或其他缓存的优势。

安装

您可以通过composer安装此包

composer require elipzis/laravel-cacheable-model

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="cacheable-model-config"

这是已发布配置文件的内容

    //Default values for the Cacheable trait - Can be overridden per model
    return [
        //How long should cache last in general?
        'ttl' => 300,
        //By what should cache entries be prefixed?
        'prefix' => 'cacheable',
        //What is the identifying, unique column name?
        'identifier' => 'id',
        //Do you need logging?
        'logging' => [
            'channel' => null, //Which channel should be used?
            'enabled' => false,
            'level' => 'debug',
        ],
    ];

用法

通过添加特性使您的模型可缓存

...
use ElipZis\Cacheable\Models\Traits\Cacheable;
...

class YourModel extends Model {

    use Cacheable;
    ... 

然后只需使用您的正常模型查询,例如

YourModel::query()->get();
YourModel::query()->where('field', 'test')->first();
YourModel::query()->insert([...]);

该包覆盖了QueryBuilder并扫描相同的查询以捕获并返回缓存的值。

您不需要做任何事情,只需像往常一样使用模型并利用缓存条目的力量!

配置

以下配置可以按模型覆盖

public function getCacheableProperties(): array {
    return [
        'ttl' => 300,
        'prefix' => 'cacheable',
        'identifier' => 'id',
        'logging' => [
            'channel' => 'anotherChannel',
            'enabled' => false,
            'level' => 'debug',
        ],
    ];
}

禁用缓存

根据您的缓存和数据库性能,您可能会想有时检索查询而不进行缓存

YourModel::query()->withoutCache()->get();

清除缓存

如果您在此包之外更新了数据,您可以通过调用

YourModel::query()->flushCache();

关于缓存使用的注意事项

此包覆盖了原生的QueryBuilder并捕获了每个数据库查询,因此它增加了负载和性能负担。

如果您在一个模型上大量使用缓存,此包及其使用可以帮助您。如果一个实体永久性地变化,使其成为Cacheable就没有意义了。

建议只使具有合理缓存时间的模型成为Cacheable。不要将特性应用于其他或所有模型,而是考虑它在哪些情况下有意义。

测试

composer test

更新日志

请参阅更新日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查看我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。