laravie/cabinet

Laravel Eloquent 的运行时缓存

v3.0.2 2021-04-18 16:28 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:32 UTC


README

Cabinet 允许您将运行时或持久缓存附加到任何 Laravel Eloquent 实例。

tests Latest Stable Version Total Downloads Latest Unstable Version License

安装

通过 composer 安装,只需在您的 composer.json 文件中添加以下内容

{
    "require": {
        "laravie/cabinet": "^3.0"
    }
}

然后从终端运行 composer installcomposer update

快速安装

以上安装也可以通过以下命令简化

composer require "laravie/cabinet=^3.0"

用法

在模型上设置 Cabinet

您首先需要将 Laravie\Cabinet\Cabinet 添加到 Eloquent 模型,例如

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Cabinet\Cabinet;

class User extends Authenticatable
{
    use Cabinet;
}

允许持久缓存

要在 Eloquent 中添加持久缓存,您必须附加一个支持标签的缓存存储(当使用 filedatabase 缓存驱动时,不支持缓存标签)。

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Cabinet\Cabinet;

class User extends Authenticatable
{
    use Cabinet;

    /**
     * Configure cabinet for the eloquent model.
     * 
     * @param  \Laravie\Cabinet\Repository  $cabinet 
     * @return void
     */
    protected function onCabinet($cabinet)
    {
        $cabinet->setStorage(resolve('cache.store'));
    }
}

存储数据

运行时

Laravie\Cabinet\Repository::share(string $key, callable $callback);

此方法允许通过闭包/可调用 $callback 将值注册为 $key

$user->cabinet()->share('birthday', static function ($user) {
    return now()->diffInDays($user->birthdate);
});

带有 TTL 的持久化

Laravie\Cabinet\Repository::share(string $key, callable $callback, $ttl = null);

通过添加第三个参数 $ttl(以秒为单位),Cabinet 将尝试将数据存储在缓存中 $ttl 秒。

$user->cabinet()->share('birthday', static function ($user) {
    return now()->diffInDays($user->birthdate);
}, 60);

永久

Laravie\Cabinet\Repository::forever(string $key, callable $callback);

您可以使用 forever 作为第三个参数使用 share,或者使用 forever 来无限期地缓存值。

$user->cabinet()->share('birthday', static function ($user) {
    return now()->diffInDays($user->birthdate);
}, 'forever');

// or

$user->cabinet->forever('birthday', static function ($user) {
    return now()->diffInDays($user->birthdate);
})

检索数据

Laravie\Cabinet\Repository::get(string $key);

使用 get 方法检索数据。

$user->cabinet()->get('birthday');

// or

$user->cabinet('birthday');

遗忘数据

Laravie\Cabinet\Repository::forget(string $key);

通过给定的 $key 忘记任何数据。

$user->cabinet()->forget('birthday');

清除所有数据

Laravie\Cabinet\Repository::flush();

清除 Eloquent 模型的所有数据。

$user->cabinet()->flush();