Redis команда, чтобы получить все доступные ключи? - PullRequest
439 голосов
/ 10 марта 2011

Существует ли команда Redis для получения всех ключей в базе данных?Я видел, как некоторые библиотеки Python-Redis их извлекали.Но было интересно, если это возможно от Redis-клиента.

Ответы [ 10 ]

642 голосов
/ 10 марта 2011

Попробуйте посмотреть на команду KEYS. KEYS * выведет список всех ключей, сохраненных в Redis.

РЕДАКТИРОВАТЬ: обратите внимание на предупреждение в верхней части KEYS страницы документации:

Сложность времени: O (N), где N - это количество ключей в базе данных, при условии, что имена ключей в базе данных и заданном шаблоне имеют ограниченную длину.

ОБНОВЛЕНИЕ (V2.8 или выше): SCAN является превосходной альтернативой KEYS в том смысле, что он не блокирует сервер и не потребляет значительные ресурсы. Предпочитаю использовать его.

138 голосов
/ 27 мая 2014

Обновлено для Redis 2.8 и выше

Как отмечалось в комментариях к предыдущим ответам на этот вопрос, KEYS - потенциально опасная команда, поскольку ваш сервер Redis будет недоступен для выполнения других операций, пока он обслуживает его. Еще один риск, связанный с KEYS, заключается в том, что он может потреблять (в зависимости от размера вашего пространства ключей) много оперативной памяти для подготовки буфера ответов, что может привести к исчерпанию памяти вашего сервера.

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

Интерфейс командной строки также предоставляет удобный способ работы с ним:

$ redis-cli --scan --pattern '*'
42 голосов
/ 11 апреля 2016

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

KEYS *

ничего не показывает или лучше показывает:
(empty list or set)

Если вы абсолютно уверены, что сервер Redis, который вы используете, это тот, у которого есть данные, то, возможно, ваш redis-cli не подключается к правильному экземпляру базы данных Redis.

Как уже упоминалось в документации Redis, новые соединения по умолчанию подключаются к db 0 .

В моем случае KEYS команда не получала результаты, потому что моя база данных была 1. Чтобы выбрать нужную БД, используйте SELECT .
БД обозначается целым числом.

SELECT 1
KEYS *

Я публикую эту информацию, потому что ни один из предыдущих ответов не решил мою проблему.

23 голосов
/ 27 июня 2016

-> Получить все ключи от 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
17 голосов
/ 24 сентября 2015

Взгляните на следующие Redis шпаргалку .Чтобы получить подмножество ключей redis с помощью redis-cli, я использую команду

KEYS "prefix:*"
6 голосов
/ 26 мая 2016

Да, вы можете получить все ключи, используя

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
3 голосов
/ 05 октября 2017
redis-cli -h <host> -p <port> keys * 

где * - шаблон для отображения всех ключей

3 голосов
/ 28 сентября 2016

SCAN не требует от клиента загрузки всех ключей в память, как это делает KEYS.SCAN дает вам итератор, который вы можете использовать.У меня было 1B записей в моем редисе, и я никогда не мог получить достаточно памяти, чтобы вернуть все ключи одновременно.

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

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key
0 голосов
/ 25 апреля 2019

KEYS pattern

Доступно с 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"
0 голосов
/ 16 августа 2018

Чтобы получить все ключи, доступные на сервере redis, вы должны открыть redis-cli и набрать: KEYS * Чтобы получить дополнительную помощь, посетите эту страницу: Эта ссылка

...