Як видалити ключі?


76

Я хочу видалити ключі, що відповідають "користувачеві *".

Як це зробити в командному рядку redis?


1
в redis ви не видаляєте ключі, а клавіші видаляють самі.
max taldykin 16.03.12

Відповіді:


57

Зараз це не функція, яку можна робити одним кадром (див. Коментарі в DELдокументації ). На жаль, вам залишається лише використовувати KEYS, переглядати результати, а потім використовувати DELдля видалення кожного з них.

Як щодо того, щоб трохи допомогти bash?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'`
 do echo DEL $key
done | redis-cli

Щоб пройти через це:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' - дістаньте всі ключі та видаліть зайвий текст, який ви не хочете, за допомогою awk.
  2. echo DEL $key - для кожного створіть ехо-оператор, щоб видалити його.
  3. | redis-cli - візьміть оператори DEL і передайте їх назад у кліп.

Не припускаючи, що це найкращий підхід (у вас можуть виникнути проблеми, якщо в деяких ваших іменах користувачів є пробіли, але, сподіваюся, ви зрозумієте).


72

Ще один компактний однокласний лайнер, який я використовую, щоб робити те, що ви хочете, це:

redis-cli KEYS "user*" | xargs redis-cli DEL

1
Це чудово, дякую. Прикро, що Redis не має цієї функціональності спочатку.
snapfractalpop

7
Якщо у вас є множинні бази даних (простори ключів), то це фокус: скажімо, вам потрібно видалити ключі в db3:redis-cli -n 3 KEYS "prefix:*" | xargs redis-cli -n 3 DEL
Christoffer

чи є один лайнер, якщо вам потрібно надати AUTH (тобто логін) перед виконанням команди видалення?
Темза

'redis-cli help' говорить: -a <пароль> Пароль для підключення до сервера. Сподіваюся, це допоможе.
user1151446

У мене були проблеми з цим. Якщо у вас є багато записів для видалення, краще скористатися наведеними нижче на основі awk.
Рафаель,


4

На додаток до відповіді апельсиновика, вам не потрібні echoі конвеєр, ви можете передавати команди як аргументи redis-cli. Це означає, що ви можете це зробити

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
 do redis-cli "DEL" "$key"
done

2

Використовуючи awk, знайдіть усі відповідні ключі від redis, використовуючи redis-cli KEYSкоманду та канал для redis-cli DELкоманди.

redis-cli KEYS "user*"  | awk '{ system("redis-cli DEL " $1) }'

1

Використовуйте це, щоб видалити ключі redis, що мають зворотні риски, лапки, подвійні лапки або пробіли:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL


0

Я знаю, що це старе, але для тих, хто приходить сюди, утворюйте Google:

Я щойно опублікував утиліту інтерфейсу командного рядка для npm та github, що дозволяє видаляти ключі, що відповідають заданому шаблону (навіть , або як ви просили користувача ) з бази даних Redis.

Ви можете знайти утиліту тут:

https://www.npmjs.com/package/redis-utils-cli


0

Використовуючи oneliner, ви можете редагувати шаблон на випадок, якщо він не відповідає певним символам. Наприклад, для видалення шаблонів типу "\ b test \ b" використовуйте:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.