2015-02-25 4 views
0

Под REDIS игровой SCAN документации, он упоминает это о SMEMBERS:node_redis: блокирование SMEMBERS?

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

Удивительно, но я не могу найти дополнительной информации о том, как SMEMBERS блокирует и когда его не использовать. Если SMEMBERS является блокирующим вызовом, безопасно ли использовать его в node_redis или блокирует Redis в конечном итоге, блокируя поток Node?

Немного связано, если SSCAN является лучшей практикой, а не вызовом СЕМЬЕВ, существует ли эквивалентный вызов SCAN для SINTER?

Заранее спасибо

ответ

3

Почти все команды Redis' блокирует, SCAN включены (это гарантирует короткое время выполнения однако). Единственными командами, которые не являются блокирующими, являются те, которые выполняются другими потоками (в настоящее время связаны только с сохранением, например BGSAVE).

В частности, SMEMBERS блокируется. Это может быть нормально, если ваш Set не слишком велик (возможно, несколько K (если Set становится слишком большим, Redis будет блокироваться при подготовке ответа и будет потреблять RAM для его буферизации перед отправкой обратно). В таких случаях, итерация через Set с помощью SSCAN рекомендуется разрешить другим запросам чередовать между вызовами к нему.

Смежные вопросы