Laravel 缓存进阶:用 remember、标签与缓存事件把失效策略做稳

test12026-10-2422 次阅读

缓存不是 set 一下就完事

新手常把所有数据无脑写进缓存,结果更新后页面还是旧的。Laravel 的缓存层提供 remember、标签分组、以及缓存事件,把"什么时候存、怎么批量失效、谁动了缓存"三件事讲清楚,才能既快又不出错。

用 remember 收敛"查缓存-查库-回写"

经典的缓存读取要写判断、回退、回写三段逻辑,remember 一行搞定,闭包只在 miss 时执行。

$posts = Cache::remember(
    "hot_posts",
    now()->addMinutes(10),
    fn () => Post::with("author")->orderByDesc("views")->take(20)->get()
);

用标签给缓存分组,批量失效

用户维度、配置维度、报表维度各自打标签,改了用户数据时只清用户这组,不影响别的缓存。

Cache::tags(["user", "profile:{$id}"])->put("profile:{$id}", $data, 3600);

// 用户信息变更时一次性清空
Cache::tags(["profile:{$id}"])->flush();

监听缓存事件做旁路审计

开启事件后发现,哪些 key 被频繁穿透、哪些被意外清除,都能在监听器里记下来,方便定位缓存击穿。

protected $listen = [
    \Illuminate\Cache\Events\CacheMissed::class => [
        \App\Listeners\LogCacheMiss::class,
    ],
    \Illuminate\Cache\Events\KeyForgotten::class => [
        \App\Listeners\LogCacheForget::class,
    ],
];

缓存的难点从来不是写入,而是失效。把 remember、标签、事件三件套用熟,缓存才真正变成性能杠杆,而不是隐藏 bug 的温床。

T

test1

文章作者

缓存不是 set 一下就完事 新手常把所有数据无脑写进缓存,结果更新后页面还是旧的。Laravel 的缓存层提供 re...

分类
技术
发布时间
2026-10-24
字数
约 921 字
阅读
22 次