Очистить данные из кеша Redis в чанке

Мне нужно удалить пул из кеша Redis. Однако в этом пуле могут быть миллионы ключей. Я использую следующий код для удаления ключей из кеша

String regex = "*." + poolname + ".*";
Set<String> rkeys = jedis.keys(regex);

for (String key : rkeys) {
    LOGGER.info("key ===>" + key);
    jedis.del(key);
}

Я боюсь, что сервер Redis может рухнуть, если есть миллион строк. Могу ли я каким-либо образом сказать Redis выбрать только 100 строк и удалить их вовремя. Что-то вроде

while (true) {
    //sleep for 1 minute
    //get 100 rows from cache
    if (keys.isEmpty()) {
        break;
    }
    jedis.del(key);
}

person Resham kumari    schedule 23.12.2016    source источник
comment
Попробуйте использовать SCAN — джедаи должны иметь это в виду.   -  person Itamar Haber    schedule 23.12.2016


Ответы (1)


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

Тем не менее, вы можете проверить https://redis.io/commands/unlink, который — это новая неблокирующая версия DEL.

person Matthias Winkelmann    schedule 05.01.2017