我试图使用Redis客户端redis-rb连接到一个为集群配置的Azure。
我试过的是:
我已经使用这个相关问题成功地连接到一个非集群的Azure。我还可以使用它连接到集群Azure Redis缓存,当我尝试获取或设置键时,该缓存正确地报告MOVED:
Redis::CommandError (MOVED 1234 address_here:port_here)我看过这个文档用于创建与cluster的连接。
节点可以作为连接URL数组传递给客户端。 节点=(7,000..7005).map{区端口" redis ://127.0.0.1:#{port}“}redis=Redis.new(集群:节点) 还可以将这些选项指定为哈希。这些选项与单个服务器连接的选项相同。 (7000.7005).map{端口{主机:'127.0.0.1',端口:端口}
我使用了这些示例来针对单个可用的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)我尝试了文档中列出的每个变体,结果都是一样的。
问题:
Redis的Azure Cache公开单个DNS端点上的集群节点,而这个redis-rb集群参数似乎需要一个已知节点端点的集合。
是否可以使用此库连接到群集Azure Redis缓存?如果是这样的话,一个可复制的例子会是什么样的呢?如果不可能使用redis-rb,但是可以使用另一个Redis客户端,我也会对该解决方案感兴趣。
发布于 2019-11-03 18:00:54
根据Azure官方文件How to configure Redis clustering for a Premium Azure Cache for Redis,有两个常见问题已经回答了您的问题。
不是所有的客户都支持Redis集群!请检查您正在使用的库的文档,以验证您使用的是支持群集的库和版本。StackExchange.Redis是一个支持集群的库,在其更新的版本中。有关其他客户端的更多信息,请参见Redis集群教程的Redis集群教程部分。 Redis集群协议要求每个客户端在集群模式下直接连接到每个碎片,并且还定义了新的错误响应,比如‘mode’na 'CROSSSLOTS‘。尝试使用不支持集群模式缓存的集群的客户端可能会导致大量的移动重定向异常,或者如果您正在执行跨槽的多键请求,则只会破坏应用程序。 Note 如果您使用StackExchange.Redis作为客户端,请确保您使用的是最新版本的StackExchange.Redis 1.0.481或更高版本的集群才能正常工作。如果在移动异常方面有任何问题,请参阅移动异常以获得更多信息。
您可以使用连接到未启用群集的缓存时使用的相同端点、端口和键连接到缓存。Redis管理后端的集群,因此您不必从客户端管理它。
因此,请按照下图使用redis-rb-cluster而不是redis-rb连接Azure,用于启用与非群集相同的群集。

https://stackoverflow.com/questions/58653151
复制相似问题