emprove / laravel-model-caching
Eloquent模型自动缓存。
Requires
- php: >=7.1.3
- fico7489/laravel-pivot: dev-new@dev
- 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: ^0.23.4
- fzaninotto/faker: *
- mockery/mockery: *
- orchestra/database: 3.7.x-dev@dev
- orchestra/testbench: 3.7.*
- orchestra/testbench-browser-kit: 3.7.*
- php-coveralls/php-coveralls: *
- phpmd/phpmd: *
- phpunit/phpunit: 7.*
- predis/predis: *
- sebastian/phpcpd: *
- symfony/thanks: *
- dev-master
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 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-develop
- dev-feature/performance-improvements
- dev-laravel-5.5
- dev-laravel-5.6
This package is not auto-updated.
Last update: 2024-09-28 11:28:03 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中包含全面的文档。
- ✅ 提供最新的CHANGELOG.md,该文件遵循http://keepachangelog.com中概述的格式。
- ✅ 所有代码中都没有PHPMD或PHPCS警告。
贡献
请遵守和尊重包含的《行为准则》的各个方面https://github.com/GeneaLabs/laravel-model-caching/blob/master/CODE_OF_CONDUCT.md。
报告问题
在报告问题时,请尽可能完整地填写包含的模板。如果信息不完整,问题可能会被忽略或关闭,因为没有足够的信息可以采取行动。
提交拉取请求
请查看贡献指南https://github.com/GeneaLabs/laravel-model-caching/blob/master/CONTRIBUTING.md。只有符合所有标准的PR才会被接受。
❤️ 开源软件 - 给 ⭐️
我们已经将惊人的symfony/thanks
composer包作为开发依赖项包含在内。通过给使用的包加星标,让您的OS包维护者知道您感谢他们。只需安装此包后运行composer thanks即可。(不必担心,由于它是开发依赖项,它不会安装到您的生产环境中。)