Redis Stack Exchange, как удалить или получить ключи по шаблону

Я установил клиент Redis Stack Exchange на С#. Я могу удалить только один ключ или массив ключей, но я не знаю, как удалить ключи с префиксом. Или другое решение: сначала получить все ключи по шаблону, а затем удалить их. Но я тоже не знаю, как получить ключи по шаблону.


person Robert    schedule 21.10.2014    source источник


Ответы (2)


Удаление осуществляется отдельно по ключу, если только вы не очищаете всю базу данных.

Сканирование ключей легко доступно в IServer API и подробнее обсуждается здесь: https://stackexchange.github.io/StackExchange.Redis/KeysScan

Тем не менее, его все же следует избегать в производстве - это не предполагаемый вариант использования Redis.

person Marc Gravell    schedule 21.10.2014
comment
Ваша ссылка на документацию мертва. - person ErroneousFatality; 05.11.2018
comment
@ErroneousFatality исправлено, та - person Marc Gravell; 07.11.2018

Вы можете сделать следующее, чтобы удалить элементы из кеша Redis. (StackExchange.Redis.StrongName v1.0.488)

foreach (var ep in _muxer.GetEndPoints())
{
    var server = _muxer.GetServer(ep);
    var keys = server.Keys(database: _redisDatabase, pattern: pattern + "*").ToArray();
    _db.KeyDeleteAsync(keys);
}

_muxer является экземпляром ConnectionMultiplexer

Он удаляет не по шаблону, как вы просили, а гораздо быстрее, чем удалять каждый ключ отдельно.

person Kerem Demirer    schedule 14.04.2016
comment
Как это работает в кластере? Мы получаем в два раза больше конечных точек (включая ведомые) и удаляем слишком много ключей, должны ли мы фильтровать server.IsSlave == false ? - person MaurGi; 27.09.2017
comment
Не пробовал, но думаю, вам следует вызывать те же серверы, которые используются в методах одиночного удаления. - person Kerem Demirer; 06.11.2017
comment
Также читатель должен учитывать, что могут быть другие базы данных, если используется кластер (_redisDatabase по умолчанию равен 0) - person Ali Karaca; 12.07.2021