Mat*_*ijn 5 php memcached caching laravel
在Laravel中,您可以使用以下标记将项目放置在缓存中:
Cache::tags('bans')->put($result->ip, $result->reason);
Run Code Online (Sandbox Code Playgroud)
但是我似乎找不到找到带有特定标签的所有物品的方法。是否可以检索带有特定标签的所有项目?
喜欢:
Cache::tags('bans')->all();
Run Code Online (Sandbox Code Playgroud)
或类似的东西
不支持底层缓存驱动器检索某个标签的所有缓存。
如果你真的需要这种功能,你应该寻找Redis,使用Redis 的哈希而不是缓存的标签。
下面是一些示例代码:
// 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'));
Run Code Online (Sandbox Code Playgroud)
调试输出将是:
array:2 [?
"ip1" => "spam: test reason"
"ip2" => "spam: test reason 2"
]
Run Code Online (Sandbox Code Playgroud)
我觉得你用错了。作为第一个参数,您传递缓存的密钥,作为第二个值和第三个过期时间(以分钟为单位)。
如果你想合理地缓存一些禁令,例如假设你在 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 />";
}
Run Code Online (Sandbox Code Playgroud)
因此,在这里您将整个数组放入缓存中,现在您可以使用标准foreach循环访问项目。