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


503

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

Ответы:


722

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

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

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

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


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 *

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


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:*"

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

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

#!/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);

В Core 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.