Я пытаюсь использовать клиент Ruby Redis redis-rb для подключения к кэшу Redis Azure, настроенному для кластеризации.
Что я пробовал:
Я использовал этот связанный вопрос для успешного подключения к некластеризованному Redis Cache. Я также могу использовать это для подключения к кластерному кэшу Redis Azure, который правильно сообщает MOVED
, когда я пытаюсь получить или установить ключи:
Redis::CommandError (MOVED 1234 address_here:port_here)
Я видел эту документацию длясоздание соединения с cluster
:
Узлы могут быть переданы клиенту в виде массива URL-адресов соединения.
nodes = (7000..7005).map { |port| "redis://127.0.0.1:#{port}" }
redis = Redis.new(cluster: nodes)
Вы также можете указать параметры в виде хэша. Параметры те же, что и для соединения с одним сервером.
(7000..7005).map { |port| { host: '127.0.0.1', port: port } }
Я использовал эти примеры для построения примера для единственной доступной конечной точки DNS, которая завершается с ошибкой:
irb(main):024:0> client = Redis.new(cluster: ["redis://my-redis-cluster.redis.cache.windows.net:6379"])
...
Redis::CannotConnectError (Redis client could not connect to any cluster nodes)
Я пробовал каждый вариант этого, перечисленный в документации, с одинаковыми результатами.
Проблема:
Кэш Azure для Redis предоставляет кластеризованные узлы на одной конечной точке DNSв то время как этот параметр кластера redis-rb, по-видимому, ожидает набор известных конечных точек узла.
Можно ли использовать эту библиотеку для подключения к кластерному кэш-памяти Redis Azure? И если да, то на что будет похож воспроизводимый пример? Если это невозможно с redis-rb, но возможно с другим клиентом Ruby Redis, мне также будет интересно это решение.