在较新的 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 之后的文档中甚至没有解释它们,我想知道是否有另一种方法可以解决这个问题,这将允许各个密钥自行过期并单独进行存储。 谢谢。
既然你的想法是将所有“在线用户”放在同一个缓存中,你可以这样做:
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];