Laravel缓存获取带有标记的所有项目

时间:2014-10-13 12:27:27

标签: php caching laravel memcached

在Laravel中,您可以使用以下标记将项目放入缓存中:

Cache::tags('bans')->put($result->ip, $result->reason);

但我似乎无法找到一种方法来获取具有特定标签的所有物品。是否可以检索具有特定标记的所有项目?

喜欢:

Cache::tags('bans')->all(); 

或类似的东西

2 个答案:

答案 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"
]