[英]Laravel cache get all items with tag
在 Laravel 中,您可以使用如下標簽將項目放入緩存中:
Cache::tags('bans')->put($result->ip, $result->reason);
但我似乎無法找到一種方法來獲取帶有特定標簽的所有項目。 是否可以檢索具有特定標簽的所有項目?
喜歡:
Cache::tags('bans')->all();
或類似的東西
我覺得你錯了。 作為第一個參數,您傳遞緩存鍵,作為第二個值,第三個參數以分鍾為單位到期。
如果你想緩存一些有理由的禁令,例如假設你在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
循環訪問項目。
在'yourKeyGoesHere'中,您可以插入一個與*相同的字符串,或者直接插入精確的鍵。
$redis = Cache::getRedis();
$a_keys = $redis->keys("*yourKeyGoesHere*");
不支持底層緩存驅動器檢索某個標記的所有緩存。
如果你真的需要這種功能,你應該使用Redis的哈希而不是Cache的標簽來尋找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'));
調試輸出將是:
array:2 [▼
"ip1" => "spam: test reason"
"ip2" => "spam: test reason 2"
]
Laravel 將所有標記的項目存儲在一個 Redis Set
中。 所以之后:
Cache::tags('bans')->put($result->ip, $result->reason);
Laravel 創建tags:bans:key
– 它本身只存儲一個包含所有標記項目的Set
的鍵
$setKey = Cache::get('tags:bans:key'); // => 63bd57cbdb77d819804950 – key to the Set that contains all tagged items
現在我們可以使用該鍵獲取所有項目:
// get all set members
$keys = Cache::connection()->smembers("prefix:$setKey:forever_ref");
$items = [];
foreach($keys as $key) {
$key = collect(explode(':', $key))->last(); // remove prefixes from key
$items[] = Cache::tags('bans')->get($key);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.