aldeebhasan/laravel-cache-flusher

一个轻量级的包,当缓存数据发生变化时自动使缓存条目失效。

1.1.0 2023-10-27 11:35 UTC

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_infostore_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.storescompanies.1.mobiles.2 开头的条目都将失效。

注意:在绑定函数中,{company_id} 固定为 1,{user_id} 固定为 2。

许可证

Laravel Cache Flusher 包遵循 MIT 许可证 (MIT) 许可。

安全联系方式

如需报告安全漏洞,请直接联系开发者邮箱 此处