Кэш Laravel получить все предметы с тегом

В Laravel вы можете помещать элементы в кэш с помощью тега:

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

Но я не могу найти способ получить все элементы с определенным тегом. Можно ли получить все элементы с определенным тегом?

Подобно:

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

Или что-то типа того

4

Решение

Я думаю, что вы используете это неправильно. В качестве первого аргумента вы передаете ключ кеша, второе значение и третье время истечения в минутах.

Если вы хотите кешировать некоторые запреты с указанием причины, например, предположим, что в 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 петля.

3

Другие решения

В ‘YourKeyGoesHere’ Вы можете вставить строку, которая используется как * с символом *, или непосредственно ввести ключ.

$redis = Cache::getRedis();
$a_keys = $redis->keys("*yourKeyGoesHere*");
1

Подложка Cache Drive не поддерживается для извлечения всех кэшей определенного тега.

Если вам действительно нужна такая функция, вы должны искать Redis, с помощью 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"]
0
По вопросам рекламы [email protected]