В 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*");
Подложка 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"]