laragear/cache-refresh

将项目存入桶中,稍后检索。

v2.0.0 2024-03-06 23:23 UTC

This package is auto-updated.

Last update: 2024-09-13 07:33:42 UTC


README

Latest Version on Packagist Latest stable test run Codecov coverage Maintainability Sonarcloud Status Laravel Octane Compatibility

在不产生数据竞争的情况下刷新缓存中的项目。

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Collection;
use App\Models\Message;

public function send(Message $message)
{
    Cache::refresh(
        $message->to, 
        fn ($messages) => Collection::wrap($messages)->push($message)
    );
}

成为赞助商

您的支持使我能够保持这个包免费、更新和可维护。或者,您也可以 传播这个消息!

要求

  • Laravel 10 或更高版本
  • 支持锁的缓存驱动 (*).

警告

您仍然可以在不支持锁的驱动程序上使用 Cache Refresh,但请注意,刷新将不会是原子的

安装

您可以通过 Composer 安装此包

composer require laragear/cache-refresh

用法

Cache Refresh 会从您的缓存存储中检索一个键值,您可以使用回调来编辑它。这个回调可以自由地更改值并将其返回以持久化。

当缓存的值不存在时,例如当第一次调用时,您将收到 null,所以请记住,当第一次调用时,要取消 空值

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Collection;
use App\Models\Message;

public function send(Message $message)
{
    // Add the incoming message to a list of messages, refreshing the overall list.
    $messages = Cache::refresh(
        $message->to,
        function (?Collection $messages) use ($message) {
            return Collection::wrap($messages)->push($message);
        },
        60 * 5
    );
    
    return 'Messages has been queued';
}

自定义过期时间

回调还接收一个 Expire 实例,这将允许您在回调内部更改键的过期时间。

use Illuminate\Support\Facades\Cache;
use Laragear\CacheRefresh\Expire;
use App\Models\Mission;

Cache::refresh('mission', function ($mission, Expire $expire) {
    $mission ??= new Mission();
    
    if ($mission->ongoing()) {
        // Set a new expiration time.
        $expire->at(today()->endOfDay());
    }
    
    if ($mission->completed()) {
        // Expire the value immediately.
        $expire->now();
    }
    
    if ($mission->isVeryDifficult()) {
        // Put it forever.
        $expire->never();
    }

    return $mission;
}, 60 * 5);

自定义锁配置

您可以通过 lock()waitFor() 分别管理锁时间和等待时间,并使用 put() 生成回调,来省略回调以管理锁时间和等待时间。

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Collection;
use App\Models\Message;

Cache::refresh('mission')->lock(60)->waitFor(10)->put(fn ($value) => ..., 60 * 5);

PhpStorm stubs

对于 PhpStorm 用户,有一个 stub 文件,可以帮助完成此包的宏自动完成。您可以使用 phpstorm 标签发布它们。

php artisan vendor:publish --provider="Laragear\CacheRefresh\CacheRefreshServiceProvider" --tag="phpstorm"

该文件将发布到您项目的 .stubs 文件夹中。您应该将您的 PhpStorm 指向这些 stubs

Laravel Octane 兼容性

  • 没有使用过期的应用程序实例的单例。
  • 没有使用过期的配置实例的单例。
  • 没有使用过期的请求实例的单例。

使用 Laravel Octane 时应该没有问题。

安全

如果您发现任何安全问题,请通过电子邮件 darkghosthunter@gmail.com 而不是使用问题跟踪器。

许可证

在发布时,此特定包版本根据 MIT 许可证 的条款授权。

LaravelTaylor Otwell 的商标。版权所有 © 2011-2024 Laravel LLC。