Как удалить несколько ключей Redis с одним и тем же шаблоном в PHP с помощью phpredis?

Используя phpredis, Я сохранил некоторые данные в разбивке по страницам, как это:

   review/itemA/1
review/itemA/2

где 1 а также 2 являются номерами страниц. Я прочитал в документе, что вы можете использовать подстановочные знаки для получения нескольких ключей.

$allKeys = $redis->keys('*');   // all keys will match this.
$keyWithUserPrefix = $redis->keys('user*');

Но могу ли я удалить все старые ключи, используя подстановочные знаки, когда кто-то опубликовал новый отзыв? Могу ли я сделать что-то вроде:

$redis->delete('review/itemA/*'); // or  $redis->delete('review/itemA*')

Однако это не сработало.

3

Решение

Я просто использую

$redis->delete($redis->keys('*'));

Это прекрасно работает для меня.

4

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

Нет — редис DELlete не принимает подстановочные знаки, вы должны называть ключи явно. Смотрите здесь для возможных направлений: https://stackoverflow.com/a/23399125/3160475

2

$bash = 'redis-cli --scan --pattern "' . $path . '*" | xargs -L 1000 redis-cli DEL';

$res = @shell_exec($bash);
1

Когда используешь phpredisВы можете получить префикс (который phpredis автоматически добавляется везде) и таким образом удалить комбинацию ключей:

<?php
...

$prefix = $redisClient->getOption(Redis::OPT_PREFIX);
$redisClient->delete(array_map(
function ($key) use ($prefix) {
return str_replace($prefix, '', $key);
}, $redisClient->keys('*'))
);
1

С Predis, Я делаю это так:

    public function delete($key) {
$keys = $this->client->keys($key);
foreach ($keys as $key) {
$this->client->del($key);
}
}
0

Предис (->del) также позволяет передавать массив ключей.
Это работает здесь и быстрее, чем del внутри foreach,

$prefix = $this->client->getOptions($this->OPT_PREFIX);
$keys = $this->client->keys("$key*");
if ($keys) $this->client->del($keys);
-1
По вопросам рекламы [email protected]