Команда Redis, щоб отримати всі доступні ключі?


501

Чи є команда Redis для отримання всіх ключів у базі даних? Я бачив, як деякі бібліотеки python-redis отримують їх. Але цікавилось, чи можна від redis-клієнта.

Відповіді:


720

Спробуйте подивитися на KEYSкоманду. KEYS *відобразить список усіх ключів, що зберігаються у redis.

РЕДАКТУЙТЕ: зверніть увагу на попередження вгорі KEYSсторінки документації:

Часова складність: O (N), N - кількість ключів у базі даних, за умови, що імена ключів у базі даних та даний шаблон мають обмежену довжину.

ОНОВЛЕННЯ (V2.8 або вище): SCAN є чудовою альтернативою тому KEYS, що він не блокує сервер і не споживає значних ресурсів. Віддавайте перевагу його використанню.


96
Приклад використання CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -

4
Виправлення: Усі команди redis є однопотоковими і блокують сервер. Єдина відмінність полягає в тому KEYS, що потенціал довшого блокування сервера при запиті великого набору даних
Лев

155

Оновлено для Redis 2.8 і вище

Як зазначається в коментарях попередніх відповідей на це питання, KEYSце потенційно небезпечна команда, оскільки ваш сервер Redis буде недоступний для виконання інших операцій, поки він його обслуговує. Ще один ризик KEYSполягає в тому, що він може споживати (залежно від розміру простору клавіш) багато оперативної пам’яті для підготовки буфера відповідей, таким чином, можливо, вичерпати пам’ять вашого сервера.

Версія 2.8 Redis представила сімейство команд SCAN , які набагато ввічливіші і можуть бути використані для тих же цілей.

CLI також пропонує хороший спосіб роботи з ним:

$ redis-cli --scan --pattern '*'

59

Може статися, що за допомогою redis-cli ви підключаєтесь до віддаленого сервера redis, а потім командою:

KEYS *

нічого не показує, а ще краще:
(empty list or set)

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

Як згадується в документах Redis, нові з'єднання підключаються як db 0 за замовчуванням .

У моєму випадку KEYSкоманда не отримувала результатів, оскільки моя база даних була 1. Для того, щоб вибрати потрібний db, використовуйте SELECT .
Db ідентифікується цілим числом.

SELECT 1
KEYS *

Я публікую цю інформацію, оскільки жодна з попередніх відповідей не вирішила мого питання.


31

-> Отримайте всі ключі від redis-cli

-redis 127.0.0.1:6379> keys *

-> Отримайте список шаблонів

-redis 127.0.0.1:6379> keys d??

Це створить ключі, які починаються з «d» з трьох символів.

-redis 127.0.0.1:6379> keys *t*

Це отримає ключі з символом 't' у відповідності

-> Порахуйте ключі з командного рядка за

-redis-cli keys * |wc -l

-> Або ви можете використовувати dbsize

-redis-cli dbsize

Просто скопіював відповіді і спробував. Це дало "невідому команду" ключ "". "ключ" - це не команда, "клавіші" - це. Будь ласка, виправте key *t*це keys *t*.
Kunal Dethe

Дякую чувак за цю інформацію. Це була моя помилка. В даний час я перебуваю на мобільному пристрої.
Денні

Дуже корисний чіт-лист для цього
Хассан Байг

19

Погляньте на наступні шпаргалки Redis . Для отримання підмножини клавіш redis за допомогою redis-cli я використовую команду

KEYS "prefix:*"

6

Так, ви можете отримати всі ключі, скориставшись цією

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})

4
Не зовсім те, що просили ОП (redis-cli), але дякую, що все-таки вказали на це.
Герик

4

SCAN не вимагає від клієнта завантаження всіх ключів у пам'ять, як це робить KEYS. SCAN дає вам ітератор, який ви можете використовувати. У мене було 1B записів у моїй redis, і я ніколи не міг отримати достатньо пам'яті, щоб повернути всі ключі відразу.

Ось фрагмент python, щоб отримати всі ключі з магазину, що відповідають шаблону, та видалити їх:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key

3
redis-cli -h <host> -p <port> keys * 

де * - шаблон для переліку всіх клавіш


2
Я повинен був привести зірку, наступним чином :redis-cli -h <host> -p <port> keys '*'
aggregate1166877

3

KEYS візерунок

Доступний з 1.0.0.

Часова складність: O (N), N - кількість ключів у базі даних, за умови, що імена ключів у базі даних та даний шаблон мають обмежену довжину.

Повертає всі клавіші, що відповідають шаблону.

Попередження: Цю команду не рекомендується використовувати, оскільки вона може погіршити продуктивність, коли вона виконується на великих базах даних замість KEYS, ви можете використовувати SCAN або SETS .

Приклад команди KEYS для використання:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"

1

Якщо ваш Redis - це кластер, ви можете використовувати цей сценарій

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"

1

Отримайте всі ключі в Redis

Отримайте всі ключі за допомогою параметра --scan:

$ redis-cli --scan --pattern '*'

Список усіх клавіш за допомогою команди KEYS:

$ redis-cli KEYS '*'

0

Щоб отримати всі ключі, доступні на сервері redis, слід відкрити redis-cli та ввести: KEYS * Для отримання додаткової допомоги відвідайте цю сторінку: Це посилання



0

Якщо ви використовуєте Laravel Framework, тоді ви можете просто скористатися цим:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

В основній PHP:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);

0

Ви можете просто підключитися до вашого сервера redis за допомогою redis-cli, вибрати свою базу даних та ввести KEYS *, запам’ятайте, вона надасть вам усі ключі, що знаходяться у вибраній базі даних redis

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.