2016-12-01 11 views
1

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

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

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

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

ответ

0

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

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

Это возможный способ. нам нужно сделать две операции. 'SCAN' и' HDEL'. Разве это невозможно с единой работой? Есть ли способ сделать комбинацию как совпадения, так и удаления – RaR

+1

@RaR AFAIK, нет такого способа ... Если вы его найдете, поделитесь им со мной :) –

+1

Позже я обнаружил, что фактическая необходимость - сканирование, а также HSCAN. 'SCAN' с совпадением' commKey: * 'и для каждого возвращаемого ключа необходимо выполнить' HSCAN' с совпадением 'target1 *'. Затем для каждого результата необходимо выполнить «HDEL».Чтобы избежать этих многих шагов, я искал более легкий и минимальный путь – RaR

0

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

Предположит, что существует много типов ключей в вашем 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» здесь а является имя_сайтом, и эти ключи связаны с продуктами и категориями сайта электронной коммерции и генерируются 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» в приведенной выше команде.

 Смежные вопросы

  • Нет связанных вопросов^_^