在Laravel中,您可以使用以下标记将项目放入缓存中:
Cache::tags('bans')->put($result->ip, $result->reason);
但我似乎无法找到一种方法来获取具有特定标签的所有物品。是否可以检索具有特定标记的所有项目?
喜欢:
Cache::tags('bans')->all();
或类似的东西
答案 0 :(得分:3)
我认为你错了。作为第一个参数,您传递缓存的密钥,作为第二个值,第三个参数将以分钟为单位到期。
如果你想缓存一些有理由的禁令,例如假设你在PHP中有一些垃圾邮件用户,你可以使用类似的东西:
$bans = [
[
'ip' => 'test ip',
'reason' => "spam: test reason",
],
[
'ip' => 'test ip2 ',
'reason' => "spam: test reason 2",
]
];
Cache::tags('bans')->put('spam', $bans, 100);
$spams = Cache::tags('bans')->get('spam');
foreach ($spams as $spam) {
echo $spam['ip'].' '.$spam['reason']."<br />";
}
所以在这里你放入整个数组的缓存,现在你可以使用标准foreach
循环来访问项目。
答案 1 :(得分:0)
不支持底层缓存驱动器检索某个标记的所有缓存。
如果你真的需要这种功能,你应该使用Redis而不是Cache的标签来寻找Redis' hash。
以下是一些示例代码:
// Delete hash table - `bans`
Redis::del('bans');
// Setting hash table filed
Redis::hSet('bans', 'ip1', 'spam: test reason');
Redis::hSet('bans', 'ip2', 'spam: test reason 2');
// Get all filed form hash table - `bans`
dd(Redis::hGetAll('bans'));
调试输出将是:
array:2 [▼
"ip1" => "spam: test reason"
"ip2" => "spam: test reason 2"
]