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, Итак, это что-то вроде матча commKey:* и дель target1, Я пытался сделать это с hscan который включает сопоставление с образцом на подразделах (полях). Но мне нужно сделать это на "haskkey". Как это сделать эффективно? Заранее спасибо.

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

2 ответа

Решение

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

  1. использование SCAN Команда для получения ключей, которые соответствуют commKey:*
  2. Для каждого ключа звоните HDEL удалить заданную цель, независимо от того, есть ли у хеша такое поле или нет.

Вы также можете использовать эту команду для удаления ключей:

Предположим, в вашем Redis есть много типов ключей, таких как

  1. 'Abc_category_fpc_152'
  2. 'Abc_category_fpc_2545'
  3. 'Abc_category_fpc_4321'
  4. 'Xyz_product_fpc_8376'
  5. 'Xyz_product_fpc_3042'

Например, " abc_category_fpc " здесь abc - это собственное имя, и эти ключи относятся к продуктам и категориям сайта электронной коммерции и генерируются FPC.

Если вы используете эту команду, как показано ниже:

redis-cli --scan --pattern 'key*' | xargs redis-cli del

ИЛИ ЖЕ

redis-cli --scan --pattern 'abc_category_fpc*' | xargs redis-cli del

Он удаляет все ключи, такие как ' abc_category_fpc ' (удалить ключи 1, 2 и 3). Для удаления других 4 и 5 цифровых клавиш используйте команду " xyz_product_fpc " в приведенной выше команде.

Другие вопросы по тегам