aldeebhasan / laravel-cache-flusher
一个轻量级的包,当缓存数据发生变化时自动使缓存条目失效。
Requires
- php: >=8.1
Requires (Dev)
- orchestra/testbench: 8.x-dev
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2024-09-27 17:01:04 UTC
README
一个轻量级的包,当缓存数据发生变化时自动使缓存条目失效。
为什么
laravel提供的当前缓存管理系统非常出色,令人满意。在数据更新时处理缓存失效,您可以手动进行,或者您可以按标签分组缓存条目并按标签进行失效(如Redis)。即使有标签,当项目变得更大时,处理代码库中分布的所有标签也会变得困难。
此包提供了一种跟踪模型变化的简单方法,并在行为中自动使缓存失效。只需定义您的缓存和模型之间的关系,您的生活就会变得更加简单。
安装
使用composer安装
composer require aldeebhasan/laravel-cache-flusher
安装后,运行以下代码以发布配置
php artisan vendor:publish --tag=cache-flusher
基本用法
使用此包非常简单,您只需要配置所有必要的变量,然后享受这个包带来的甜头
1) enabled (默认:false)
要启用/禁用项目中的此包,您可以使用.env文件中的条目CACHE_FLUSHER_ENABLED
来控制其值。
2) driver (默认:您的默认缓存驱动程序)
它将被用来指定此包将与之一起工作的缓存驱动程序,最好使用与您在项目中使用的缓存驱动程序类似的驱动程序(以确保所有操作都在同一缓存驱动程序上执行)。您可以使用.env文件中的条目CACHE_FLUSHER_DRIVER
来控制其值。
3) cool-down (默认:null)
有时您在短时间内对模型/执行了大量操作。为了避免在特定时间段(冷却时间)内对缓存进行高频率的失效,您可以为此配置条目指定一个值(以秒为单位)。您可以使用.env文件中的条目CACHE_FLUSHER_COOL_DOWN
来控制其值。
4) mapping (默认:[])
我们包中最重要的部分。在这里,您可以指定导致其失效的缓存键以及模型。
在以下示例中,当Category模型更改(创建|更新|删除)store_info
时,将使store_info
、store_info.categories
失效;当Product模型更改(创建|更新|删除)时,将使store_info.products
失效。
'mapping' => [ 'store_info' => [ Product::class, Category::class ], 'store_info.categories' => [ Category::class ], 'store_info.products' => [ Product::class ], ]
键也可以是正则表达式,当模型发生任何更改时,所有匹配的键都将失效
在以下示例中,如果Product或Category更改(创建|更新|删除),所有以store.
或mobile.
开头的缓存条目将失效
'mapping' => [ '^(store\..+|mobile\..+)$' => [ Product::class, Category::class ] ]
所有以.products
或.categories.
结尾的缓存条目将在Product、Category或Attribute更改(创建|更新|删除)时失效
'mapping' => [ '^(.*\.products|.*\.categories)$' => [ Product::class, Category::class,Attribute::class ] ]
高级用法
有时您可能希望在使缓存键失效时提供一些条件。一个例子:您有一个多租户项目,并希望使特定公司的缓存条目失效。
此包可以通过提供在定义的mapping
配置参数中解决的绑定来解决此问题。最后,您必须提供一个绑定函数(在您的服务提供者中),以从触发失效操作的模型中提取相关值。
示例
// define the binding mapping function class AppServiceProvider extends ServiceProvider { public function boot() { //.... other boot methods CacheFlusher::setBindingFunction( function (string $bindingKey, Model $model): ?string { switch ($bindingKey) { case "company_id": return '1'; //$model->company_id case "user_id": return "2"; // $model->user_id; } return null; }); } }
绑定函数接受两个参数:$bindingKey
代表匹配的绑定键。$model
是触发失效操作的模型。定义的函数将为配置文件中定义的缓存条目模式(配置文件中的mapping
)中的每个匹配参数调用。
现在,根据以下映射配置
'mapping' => [ '^companies\.{company_id}\.stores' => [User::class], '^companies\.{company_id}\.mobiles\.{user_id}' => [User::class], ]
当 User
模型变更时,所有以 companies.1.stores
和 companies.1.mobiles.2
开头的条目都将失效。
注意:在绑定函数中,{company_id} 固定为 1,{user_id} 固定为 2。
许可证
Laravel Cache Flusher 包遵循 MIT 许可证 (MIT) 许可。
安全联系方式
如需报告安全漏洞,请直接联系开发者邮箱 此处。