удалить ключи redis, НЕ соответствующие шаблону, используя Java - PullRequest
0 голосов
/ 02 января 2019

Я хочу удалить ключи Redis, которые НЕ соответствуют определенному шаблону. Данные Redis выглядят так -

prefix9_key1
prefix9_key2
prefix11_key1
prefix11_key2
prefix2_key1
prefix2_key2

Эти префиксные значения являются случайно сгенерированными числами (пример 1123, 3422, 9879).

Я знаю, какой у меня текущий префикс (скажем, префикс11). Но нет никакого способа узнать, какие ранее использовались префиксы. Я хочу удалить все ключи, которые НЕ используют текущее значение префикса (prefix2 * и prefix9 *).

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

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Для этого вам понадобится lua UDF (в приведенном ниже примере в качестве клиента redis используется jedis),

String DELETE_SCRIPT = "local keys = redis.call('keys', '%s')" +
                       "  for i,k in ipairs(keys) do" + 
                       "    local res = redis.call('del', k)" + 
                       "  end";

Ваш шаблон будет представлять собой строковый ввод для метода с префиксом вроде prefix[^11]*

public void deleteOthers (String pattern) {
    String luaScript = String.format(DELETE_SCRIPT, pattern);
    jedis.eval(luaScript);
}

Вызов этого метода будет выглядеть примерно так:

deleteOthers("prefix[^11]*");
0 голосов
/ 02 января 2019

Из документов :

h [^ e] llo соответствует hallo, hbllo, ... но не hello

Но,конкретный пример, который вы привели, немного хитрый.Вот как вы можете получить желаемую фильтрацию:

=>redis-cli keys \*
1) "pre1_234"
2) "pre3_234"
3) "pre11_asv"
4) "pre2_234"

=>redis-cli keys 'pre[^1]*' | redis-cli keys 'pre?[^1]*'
1) "pre1_234"
2) "pre3_234"
3) "pre2_234"

Мне redis-cli keys 'pre [^ 1] [^ 1] ' * должен был дать желаемый результат.Но это не работает.Короткие замыкания сопоставителя шаблонов в первом [^ 1] и, следовательно, pre1_234 не являются частью выходных данных.Причуды regex:)

Вы можете использовать скрипт lua для атомарного удаления в одном вызове Redis. Смотрите это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...