Как использовать команду HSCAN в Redis?

Я хочу использовать команду Redis HSCAN в своем задании, но я понятия не имею, как она работает. Официальная страница Redis (http://redis.io/commands/hscan) для этой команды дает мне пустую страницу .

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

Я использую следующую команду для сохранения своих данных

HMSET myhash ordertype "neworder" order_ts "1234" act_type "order_ack" ack_ts "1240"
HMSET myhash2 ordertype "neworder" order_ts "2234" act_type "order_ack" ack_ts "2240"

Может ли кто-нибудь дать мне несколько примеров того, как использовать HSCAN?

В моем случае я хотел бы получить следующий вывод:
1) myhash
2) myhash2
3) myhash3
.
.
.
.


person user2418755    schedule 11.11.2013    source источник


Ответы (2)


Команды

Запустите полное сканирование хэша с помощью:

HSCAN myhash 0

Запустите сканирование хэша с полями, соответствующими шаблону:

HSCAN myhash 0 MATCH order_*

Запустите сканирование хэша с полями, соответствующими шаблону, и заставьте команду сканирования выполнять больше сканирования с помощью:

HSCAN myhash 0 MATCH order_* COUNT 1000

Примечание

Не забывайте, что MATCH может возвращать мало элементов или вообще не возвращать их для каждой итерации, как описано в . документация:

Важно отметить, что фильтр ПОИСКПОЗ применяется после извлечения элементов из коллекции, непосредственно перед возвратом данных клиенту. Это означает, что если шаблон соответствует очень небольшому количеству элементов внутри коллекции, SCAN, скорее всего, не вернет ни одного элемента в большинстве итераций.

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

[Обновление] Как указано Didier Spezia, для использования вам потребуется Redis 2.8+ команды *SCAN.

person FGRibreau    schedule 12.11.2013
comment
И обратите внимание, что вам нужен Redis 2.8, чтобы получить возможности сканирования. Стабильный Redis по-прежнему 2.6. - person Didier Spezia; 12.11.2013
comment
Я думаю, что он в замешательстве. то, что он хочет, это хэш-ключи в качестве вывода, в то время как HSCAN будет сканировать значения сканирования. - person Jack Daniel's; 20.11.2013
comment
Можно ли использовать совпадение в сложном типе данных/объекте? - person Fernando; 22.12.2020

Как упоминалось вами. вам нужно получить вывод хеш-ключей

myhash
myhash2
myhash3

HSCAN не для этой цели. HSCAN предназначен для сканирования полей определенного HASH. так что вы можете сканировать поля myhash или myhash2. Но если вы хотите найти ключи на основе шаблонов, у вас есть два варианта.

Создайте SET с ключами HASH

SADD hashkeys "myhash" "myhash1" "myhash2"

SMEMBERS hashkeys
    1) "myhash"
    2) "myhash2"
    3) "myhash1"

If you are using 2.8 I would recommend you use sscan instead of smembers

sscan hashkeys 0 match my*

ИСПОЛЬЗОВАТЬ ТОЛЬКО КОМАНДУ СКАНИРОВАНИЯ

scan 0 MATCH myhash* count 1000 

ИСПОЛЬЗУЙТЕ сопоставление ключей (НЕ РЕКОМЕНДУЕТСЯ, ТАК КАК заблокирует сервер Redis)

keys myhash*

Итак, длинная сортировка по истории, чтобы получить ключи, вы можете использовать SMEMBERS, SSCAN или KEYS. Конечно, лучше всего использовать SSCAN, если вы используете Redis 2.8.

person Jack Daniel's    schedule 20.11.2013