Подтвердить что ты не робот

Команда Redis для получения всех доступных ключей?

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

KEYS *

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

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

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

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

SELECT 1
KEYS *

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

Ответ 4

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

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

-redis-cli keys * |wc -l

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

-redis-cli dbsize

Ответ 5

Взгляните на 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) {
})

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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"

Ответ 10

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

#!/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"

Ответ 11

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

Ответ 12

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

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