laragear / cache-refresh
将项目存入桶中,稍后检索。
v2.0.0
2024-03-06 23:23 UTC
Requires
- php: ^8.1
- illuminate/cache: 10.*|11.*
- illuminate/contracts: 10.*|11.*
- illuminate/support: 10.*|11.*
Requires (Dev)
- orchestra/testbench: 8.*|9.*
README
在不产生数据竞争的情况下刷新缓存中的项目。
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 许可证 的条款授权。
Laravel 是 Taylor Otwell 的商标。版权所有 © 2011-2024 Laravel LLC。