如何从 Laravel 的 Cache 中获取所有带有特定前缀的缓存键?

问题描述 投票:0回答:1

在较新的 Laravel 版本中是否有一种方法可以缓存具有特定前缀的许多内容,然后通过执行 Cache::get('prefix_*) 或其他操作来获取所有内容? 我试图将在线用户缓存大约 5 分钟,并且我希望每个用户的缓存分别过期,除非使用中间件更新过期时间。 但我遇到的问题是,如果我将所有用户存储为单独的密钥,我将无法检索所有用户:

 Cache::put('online_users_'.auth()->id(), auth()->user(), now()->addMinutes(5));

我想通过使用类似的东西来获得它们:

Cache::get('online_users_'); or Cache::get('online_users_*');

我可以尝试使用标签来解决这个问题,但是由于 Laravel 10 之后的文档中甚至没有解释它们,我想知道是否有另一种方法可以解决这个问题,这将允许各个密钥自行过期并单独进行存储。 谢谢。

laravel caching redis laravel-10
1个回答
0
投票

既然你的想法是将所有“在线用户”放在同一个缓存中,你可以这样做:

Cache::put('online_users', [auth()->id() => auth()->user()], now()->addMinutes(5));

这实际上会在您的

key:value
缓存键中创建一个
online_users

现在,当您尝试从缓存中获取记录时:

Cache::get('online_users');

你会得到这样的数据:

[
    1 => UserObject2,
    2 => UserObject1
]

其中 1 或 2 将是您的

auth users ID
,而
UserObject1
UserObject2
将是由
auth()->user()
返回的对象。

您甚至可以从缓存中获取特定的用户对象,如下所示:

Cache::get('online_users_')[auth()->id];
© www.soinside.com 2019 - 2024. All rights reserved.