Redis - удалить поле путем сопоставления с образцом на хеш-ключе

У меня есть следующая структура в Redis,

commKey:hkey1
    target1 - value1
    target2 - value2
commKey:hkey2
    target2 - value3
    target3 - value4
commKey:hkey3
    target1 - value5
    target3 - value6
...

commkey будет отображаться на всех хэш-ключах, за которым следует пространство имен и уникальная строка (hkey1, hkey2, hkey3...). Я хочу удалить все target1 во всех ключах. target1 появляется в commKey:hkey1 и commKey:hkey3. Итак, это что-то вроде match commKey:* и del target1. Я попытался сделать это с помощью hscan, который включает сопоставление шаблонов в подразделах (полях). Но мне нужно сделать это на "haskkey". Как это сделать эффективно? Заранее спасибо.

PS: у нас есть commKey, потому что в будущем мы можем захотеть добавить другой тип хеш-ключа, который не начинается с commKey, и это не должно повлиять на это.


person RaR    schedule 01.12.2016    source источник


Ответы (1)


Вы должны сканировать ключи, а не хэш.

  1. Используйте команду SCAN, чтобы получить ключи, соответствующие commKey:*
  2. Для каждого ключа вызовите HDEL, чтобы удалить заданную цель, независимо от того, есть ли в хэше такое поле или нет.
person for_stack    schedule 02.12.2016
comment
Это возможный путь. нам нужно сделать две операции. SCAN и HDEL. Разве это не возможно с одной операцией? Есть ли способ объединить как совпадение, так и удаление - person RaR; 02.12.2016
comment
@RaR AFAIK, такого способа нет ... Если вы найдете его, поделитесь им со мной :) - person for_stack; 02.12.2016
comment
Позже я обнаружил, что на самом деле необходимо выполнять сканирование, а также hscan. SCAN с совпадением commKey:* и для каждого возвращаемого ключа необходимо выполнить HSCAN с совпадением target1*. Затем для каждого результата нужно выполнить HDEL. Чтобы избежать этих многочисленных шагов, я искал более простой и минимальный способ. - person RaR; 02.12.2016