guestisp / laravel-model-caching
Eloquent模型的自动缓存。
Requires
- fico7489/laravel-pivot: *
- illuminate/cache: 5.4 - 5.7
- illuminate/config: 5.4 - 5.7
- illuminate/console: 5.4 - 5.7
- illuminate/database: 5.4 - 5.7
- illuminate/support: 5.4 - 5.7
Requires (Dev)
- codedungeon/phpunit-result-printer: *
- fzaninotto/faker: *
- mockery/mockery: *
- orchestra/database: 3.7.x-dev
- orchestra/testbench: 3.7.*
- orchestra/testbench-browser-kit: 3.7.x-dev
- php-coveralls/php-coveralls: *
- phpmd/phpmd: *
- phpunit/phpunit: 7.*
- predis/predis: *
- sebastian/phpcpd: *
- symfony/thanks: *
- dev-master
- 9.0.1
- 9.0.0
- 0.3.0
- 0.2.64
- 0.2.63
- 0.2.62
- 0.2.61
- 0.2.60
- 0.2.59
- 0.2.58
- 0.2.57
- 0.2.56
- 0.2.55
- 0.2.54
- 0.2.53
- 0.2.52
- 0.2.51
- 0.2.50
- 0.2.49
- 0.2.48
- 0.2.47
- 0.2.46
- 0.2.45
- 0.2.44
- 0.2.43
- 0.2.42
- 0.2.41
- 0.2.40
- 0.2.39
- 0.2.38
- 0.2.37
- 0.2.36
- 0.2.35
- 0.2.34
- 0.2.33
- 0.2.32
- 0.2.31
- 0.2.30
- 0.2.29
- 0.2.28
- 0.2.27
- 0.2.26
- 0.2.25
- 0.2.24
- 0.2.23
- 0.2.22
- 0.2.21
- 0.2.20
- 0.2.19
- 0.2.18
- 0.2.17
- 0.2.16
- 0.2.15
- 0.2.14
- 0.2.13
- 0.2.12
- 0.2.11
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
- dev-feature/performance-improvements
- dev-develop
- dev-laravel-5.5
- dev-laravel-5.6
This package is auto-updated.
Last update: 2024-09-12 04:47:11 UTC
README
Laravel模型缓存
动机
我创建这个包是为了响应一个客户项目,该项目有复杂嵌套的表单,包含许多
特性
- 自动、自失效的关系(仅懒加载)缓存。
- 自动、自失效的模型查询缓存。
- 自动使用支持它们的缓存提供者的缓存标签(对于不支持它们的提供者将清除整个缓存)。
要求
- PHP >= 7.1.3
- Laravel 5.4 - 5.7
可能冲突的包
任何也覆盖了Model类的newEloquentModel()方法的包可能会与此包冲突。到目前为止,这些可能包括以下包
安装
composer require genealabs/laravel-model-caching
配置
推荐(可选)自定义缓存存储
如果您想使用与您的Laravel应用程序默认使用的缓存存储不同的缓存存储,您可以在您的.env文件中将MODEL_CACHE_STORE环境变量设置为在config/cache.php中配置的缓存存储的名称。例如
MODEL_CACHE_STORE=redis2
用法
为了最佳性能,建议使用支持标签的缓存提供者(redis,memcached)。虽然这是可选的,但使用非标签缓存提供者将意味着每次创建、保存、更新或删除模型时都会清除整个缓存。
为了便于维护,我建议添加一个使用Cachable的BaseModel模型,然后从这个模型扩展所有其他模型。如果您不想这么做,只需直接从CachedModel扩展您的模型即可。
以下是一个BaseModel类的示例
<?php namespace App; use GeneaLabs\LaravelModelCaching\Traits\Cachable; abstract class BaseModel { use Cachable; // }
多个数据库连接
感谢@dtvmedia建议此功能。这实际上比缓存前缀更稳健的解决方案。
自动处理多个数据库连接的键的分离。这对于多租户应用程序以及使用多个数据库连接的应用程序尤其重要。
可选的缓存键前缀
感谢@lucian-dragomir建议此功能!您可以使用缓存键前缀来为多租户应用程序保留不同的缓存条目。为此,建议将Cachable特质添加到基模型中,然后在其中设置缓存键前缀配置值。
请注意,配置设置在调用父方法之前包含,因此设置也在父方法中可用。如果您正在开发多租户应用程序,请参阅上面的说明。
以下是一个示例
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures; use GeneaLabs\LaravelModelCaching\Traits\Cachable; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class BaseModel extends Model { use Cachable; public function __construct($attributes = []) { config(['laravel-model-caching.cache-prefix' => 'test-prefix']); parent::__construct($attributes); } }
异常:用户模型
我不建议缓存用户模型,因为它是一个特殊情况,因为它扩展了Illuminate\Foundation\Auth\User。覆盖它将破坏功能。不仅如此,缓存用户模型可能也不是一个好主意,因为您总是想获取最新的信息。
实验性:特定模型中的缓存冷却
在某些情况下,您可能希望在特定模型中添加缓存失效冷却期。例如,您可能有一个繁忙的网站,其中评论以高频率提交,您不希望每次提交评论都使缓存失效。虽然我并不特别推荐这样做,但您可以尝试测试其有效性。
可以实现如下
(new Comment) ->withCacheCooldownSeconds(30) ->get();
禁用查询缓存
有两种方法可以禁用模型缓存
- 在按查询实例中调用
->disableCache()。 - 在您的
.env文件中设置MODEL_CACHE_DISABLED=TRUE。
建议:在所有seeder查询中使用选项#1,以避免在多次重新播种时拉入缓存信息。您可以在查询链中的任何地方使用disableCache()来禁用特定的查询。例如
$results = $myModel->disableCache()->where('field', $value)->get();
手动刷新特定模型
您可以使用以下Artisan命令来刷新特定模型的缓存
php artisan modelCache:clear --model=App\Model
当手动更新数据库时,这很有用。您还可以在从Laravel应用程序外部更新数据库后触发此操作。
可能的未来改进
总结
这就是您需要做的。所有模型查询和关系现在都已缓存!
在测试中,这已经将某些页面的性能优化提高了高达900%!通常,您应该看到大约100%的性能提升。
对质量的承诺
在包开发过程中,我尽可能地采用良好的设计和开发实践,以确保这个包尽可能好。我的包开发清单包括
- ✅ 使用单元测试尽可能接近100%的代码覆盖率。
- ✅ 消除SensioLabs Insight和Scrutinizer识别的任何问题。
- ✅ 完全符合PSR1、PSR2和PSR4。
- ✅ 在README.md中包含全面的文档。
- ✅ 提供遵循http://keepachangelog.com格式的最新CHANGELOG.md。
- ✅ 在所有代码中没有任何PHPMD或PHPCS警告。
贡献
请遵守和尊重包含的Code of Conduct的所有方面 https://github.com/GeneaLabs/laravel-model-caching/blob/master/CODE_OF_CONDUCT.md。
报告问题
在报告问题时,请尽可能完整地填写包含的模板。不完整的问题可能会被忽略或关闭,如果没有足够的信息可以采取行动。
提交Pull Requests
请查看贡献指南 https://github.com/GeneaLabs/laravel-model-caching/blob/master/CONTRIBUTING.md。只有符合所有标准的PR才会被接受。
❤️开源软件 - 点赞⭐️
我们已将出色的symfony/thanks composer包作为开发依赖项包含在内。通过在安装此包后运行composer thanks来让您的OS包维护者知道您感谢他们。只需运行composer thanks即可。(不必担心,由于它是开发依赖项,它不会安装到您的实时环境中。)

