Команда Redis, чтобы получить все доступные ключи?

есть команда Redis для извлечения всех ключей в базе данных? Я видел, как некоторые библиотеки python-redis извлекали их. Но было интересно, возможно ли это от redis-client.

9 ответов


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

EDIT: обратите внимание на предупреждение в верхней части KEYS документация страницы:

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

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


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

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

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

CLI также обеспечивает хороший способ работы с ним:

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

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

KEYS *

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

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

как указано в документах Redis, новые соединения подключаются по умолчанию к db 0.

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

SELECT 1
KEYS *

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


-->получить все ключи от 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*

это wil получить ключи с матчами ' t ' символ в key

-->Count ключи из командной строки по

-redis-cli keys * |wc -l

-->или вы можете использовать dbsize

-redis-cli dbsize

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

KEYS "prefix:*"

Да, вы можете получить все ключи с помощью этого

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, 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

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

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


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