Client与Redis Cluster的交互
Client's interaction with Redis Cluster
我已经开始探索 Redis 集群及其 C 客户端 (hiredis)。我一直无法找到有关客户端与 Redis 集群交互的很多信息。我在这方面有一些疑问:
客户端一开始是否与集群的所有节点(主从)建立连接?
是否有任何协调器节点将客户端的请求代理到正确的节点?[=10=]
如果不是,客户端是否会定期获取有关集群中每个节点的哈希槽持有量的信息(以便将其请求发送到正确的节点)?
哪些客户端-集群连接特定参数是可配置的?
Does the client make a connection with all the nodes?
是的,客户端至少与所有master保持连接。
Is there a coordinator node which proxies the client's request to the correct node?
不,没有。按照设计,redis 集群没有代理。
(旁白:有一些关于为 Redis 开发代理解决方案的讨论——但我不希望它很快发布。)
Does the client periodically get info about hash slot bindings?
当客户端启动时,它会建立哈希槽映射的缓存。然后,在运行时,如果一个插槽被迁移到另一个主服务器,redis 集群将 return 一个特定的错误,告诉客户端该插槽的新所有者。然后,客户端应缓存新所有者,并重试对新节点的请求。
由于这种设计,客户端通常对每个插槽及其所有者都有很好的缓存,并且开销很小。
which client connection parameters are configurable?
最重要的参数是连接到集群的服务器节点列表。您不必指定所有节点 - 客户端可以自动发现所有主节点。只要有一个节点处于活动状态,客户端就会发现所有其他节点。
除此之外,您还有连接超时参数、控制 TLS 的参数。
我已经开始探索 Redis 集群及其 C 客户端 (hiredis)。我一直无法找到有关客户端与 Redis 集群交互的很多信息。我在这方面有一些疑问:
客户端一开始是否与集群的所有节点(主从)建立连接?
是否有任何协调器节点将客户端的请求代理到正确的节点?[=10=]
如果不是,客户端是否会定期获取有关集群中每个节点的哈希槽持有量的信息(以便将其请求发送到正确的节点)?
哪些客户端-集群连接特定参数是可配置的?
Does the client make a connection with all the nodes?
是的,客户端至少与所有master保持连接。
Is there a coordinator node which proxies the client's request to the correct node?
不,没有。按照设计,redis 集群没有代理。 (旁白:有一些关于为 Redis 开发代理解决方案的讨论——但我不希望它很快发布。)
Does the client periodically get info about hash slot bindings?
当客户端启动时,它会建立哈希槽映射的缓存。然后,在运行时,如果一个插槽被迁移到另一个主服务器,redis 集群将 return 一个特定的错误,告诉客户端该插槽的新所有者。然后,客户端应缓存新所有者,并重试对新节点的请求。
由于这种设计,客户端通常对每个插槽及其所有者都有很好的缓存,并且开销很小。
which client connection parameters are configurable?
最重要的参数是连接到集群的服务器节点列表。您不必指定所有节点 - 客户端可以自动发现所有主节点。只要有一个节点处于活动状态,客户端就会发现所有其他节点。
除此之外,您还有连接超时参数、控制 TLS 的参数。