Пакет команд Redis на кластере Redis - PullRequest
1 голос
/ 28 февраля 2020

Мы используем StackExchange.Redis для доступа к обычной базе данных Redis. Теперь мы хотим настроить эту базу данных как кластер, поэтому мы проверяем код, чтобы убедиться, что нет сценариев MULTI или Lua, которые могут сломаться из-за распределения ключей по узлам.

Нет Lua сценариев или MULTI, но есть много redis.GetDatabase().CreateBatch(). Насколько я знаю, пакет просто отправляет конвейерные команды в Redis, но будет ли это работать с кластером Redis?

После прочтения некоторой документации я бы сказал, что каждая команда в пакете будет обрабатываться отдельно и если узел перенаправляет клиента на другой узел для этой конкретной команды, он будет обрабатываться самой библиотекой. Фактически, каждая команда в пакете имеет свою собственную возвращаемую задачу, поэтому все должно быть в порядке. Однако в inte rnet есть некоторые люди, утверждающие обратное: https://groups.google.com/forum/#! Topic / redis-db / 1wc9tJSprms

Так можно ли ожидать, что пакеты будут работать правильно в Redis Cluster?

1 Ответ

1 голос
/ 02 марта 2020

должно работать. Внутренне RedisBatch.Execute разбивает команды в очереди на группы для каждого пункта назначения (сохраняя первоначальный порядок для каждой группы), а затем сбрасывает каждую отдельно; поэтому он действительно рассматривает сценарий и старается как можно больше объединить вещи, чтобы избежать фрагментации пакетов и чередующихся сообщений и т. д. c. Если используемые ключи означают, что это в конечном итоге говорит с 3 различными серверами, то пусть будет так. Это будет включать в себя больше пакетов, чем если бы вы разговаривали только с одним сервером, но тогда ... у вас также есть 3 серверных процессора для обработки работы, так что ... как за, так и против. Но принципиально: да, это должно работать.

...