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

503

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

Лалитх
источник

Ответы:

722

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

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

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

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

yojimbo87
источник
96
Пример использования CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -
4
Исправление: Все команды redis являются однопоточными и блокируют сервер. Единственное отличие состоит в том, что KEYSпри запросе большого набора данных возможно более длительное время блокирование сервера
Лев
156

Обновлено для 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 docs, новые соединения по умолчанию подключаются к базе данных 0 .

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

SELECT 1
KEYS *

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

Evhz
источник
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*

Это позволит получить ключи с символами «т» в ключе

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

-redis-cli keys * |wc -l

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

-redis-cli dbsize
денис
источник
Просто скопировал ответы и попробовал. Он дал «неизвестную команду« ключ »». «ключ» - это не команда, «ключ» - это. Пожалуйста , исправьте key *t*в keys *t*.
Кунал Дет
Спасибо, чувак, за эту информацию. Это была моя ошибка. В настоящее время я нахожусь на мобильном телефоне. Я буду менять эту команду раньше.
Денни
Очень полезная шпаргалка это
Хасан Бэйг
19

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

KEYS "prefix:*"
WAMI
источник
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"
anandchaugule
источник
1

Если ваш редис является кластером, вы можете использовать этот скрипт

#!/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 '*'
Netwons
источник
0

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

бехзад бабей
источник
0

Мы должны использовать --scan --pattern с redis 2.8 и более поздними версиями.

Вы можете попробовать использовать эту оболочку поверх Redis-Cli. https://github.com/VijayantSoni/redis-helper

Vijayant
источник
0

Если вы используете Laravel Framework, вы можете просто использовать это:

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

print_r($allKeyList);

В Core PHP:

$redis = new Redis();

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

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

print_r($allKeyList);
Виная Сингх
источник
0

Вы можете просто подключиться к вашему серверу Redis с помощью Redis-Cli, выбрать вашу базу данных и ввести KEYS *, помните, что он даст вам все ключи, присутствующие в выбранной базе данных Redis.

user1157635
источник