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 ответа
Вы должны сканировать ключи, а не хэш.
- использование
SCAN
Команда для получения ключей, которые соответствуютcommKey:*
- Для каждого ключа звоните
HDEL
удалить заданную цель, независимо от того, есть ли у хеша такое поле или нет.
Вы также можете использовать эту команду для удаления ключей:
Предположим, в вашем Redis есть много типов ключей, таких как
- 'Abc_category_fpc_152'
- 'Abc_category_fpc_2545'
- 'Abc_category_fpc_4321'
- 'Xyz_product_fpc_8376'
- '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 " в приведенной выше команде.