【问题标题】:Remove cache keys by pattern/wildcard通过模式/通配符删除缓存键
【发布时间】:2017-08-20 06:29:35
【问题描述】:

我正在使用 Lumen 构建一个 REST API,并希望使用 Redis 缓存一些路由。例如。对于我使用的路线 /users/123/items:

$items = Cache::remember('users:123:items', 60, function () {
  // Get data from database and return
});

当对用户的项目进行更改时,我会清除缓存:

Cache::forget('users:123:items');

到目前为止一切顺利。但是,我还需要清除为路由 /users/123 和 /users/123/categories 实现的缓存,因为它们也包含项目列表。这意味着我还必须运行:

Cache::forget('users:123');
Cache::forget('users:123:categories');

未来,可能会有更多的缓存需要清除,这就是为什么我正在寻找模式/通配符功能,例如:

Cache::forget('users:123*');

有没有办法在 Lumen/Laravel 中适应这种行为?

【问题讨论】:

    标签: laravel lumen


    【解决方案1】:

    您可以使用cache tags

    缓存标签允许您在缓存中标记相关项目,然后刷新所有已分配给定标签的缓存值。您可以通过传入标记名称的有序数组来访问标记缓存。例如,让我们访问一个标记的缓存并将值放入缓存中:

    Cache::tags(['people', 'artists'])->put('John', $john, $minutes);
    

    您可以刷新所有分配了标签或标签列表的项目。例如,此语句将删除所有标记为人员、作者或两者的缓存。因此,Anne 和 John 都将从缓存中删除:

    Cache::tags(['people', 'authors'])->flush();
    

    【讨论】:

    • 谢谢,我实际上阅读了标签,但没有意识到我可以将它用于带有用户 ID 的动态标签。所以我猜是这样的:Cache::tags(['user:123'])->remember('items', 60, function () {...?
    • 使用“文件”或“数据库”驱动程序时不支持:(
    • 标签在每个键值存储中都是一件令人头疼的事情。无论您使用什么驱动程序。在大多数系统中,请求的通配符解决方案会更快。
    • DynamoDB on Vapor 也不支持此功能。
    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 2020-04-15
    • 2019-03-03
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多