elipzis / laravel-cacheable-model
Laravel应用的自动查询模型缓存
v0.4.1
2024-07-09 07:54 UTC
Requires
- php: ^8.2|^8.3
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.14
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^6.1
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.6
- spatie/laravel-ray: ^1.26
README
为您的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)。请参阅许可证文件以获取更多信息。