如何访问集群实例

本指南演示如何使用行业标准的客户端库建立到 Redis 集群模式实例的连接。示例涵盖 go-redisJedisLettuceRedisson 的配置细节。有关更多客户端选项,请参阅 使用 Redis client API libraries 连接

认证要求

Redis 集群模式实例支持以下认证选项:

  • 密码认证:当配置了密码时,所有客户端连接都必须提供有效凭据
  • 无密码访问:如果在实例创建期间禁用了 Set Password 选项,客户端可在无需认证的情况下连接
安全最佳实践

对于生产环境,强烈建议启用密码认证以保护您的数据。有关配置和维护安全凭据的详细说明,请参阅 用户管理

连接端点参考

内部集群访问

对于部署在同一 Kubernetes 集群中的应用,可通过 Access Method 选项卡下 Access within the Cluster 部分获取内部访问端点。

参数描述
Connection Address每个 Redis 集群模式分片的 Kubernetes 服务名称和端口组合

外部集群访问

对于从 Kubernetes 环境外部连接的应用,如果在实例创建期间进行了配置,则可使用外部访问端点。这些端点可在 Access Method 选项卡下 Access from outside the Cluster 部分找到。

端点类型描述
Shard AddressRedis 集群模式中分片的 pod 的外部 IP 地址和端口,用于从 Kubernetes 网络外部建立连接

交互式调试

对于管理操作和故障排查,Redis CLI 可直接访问集群节点:

  1. 在实例详情页中打开 Terminal Console

  2. 使用支持集群的客户端模式连接到任意节点:

    redis-cli -c -h <internal-routing-ip> -p 6379

以下是一个演示基于 slot 重定向的调试会话示例:

192.168.0.10:6379> set a 1
-> Redirected to slot [15495] located at 192.168.0.10:6379
OK
192.168.0.10:6379> get a
"1"
192.168.0.10:6379>

-c 标志可启用自动跟随 MOVEDASK 重定向,这在使用 Redis 集群模式时非常重要。

客户端集成示例

以下示例演示使用各种客户端库连接到 Redis 集群模式实例的最佳实践。

go-redis
Jedis
Lettuce
Redisson
package main

import (
    "context"
    "fmt"
    "time"
    // It is recommended to periodically upgrade to the latest version of the client for the latest bug fixes.
    "github.com/redis/go-redis/v9"
)

func main() {
    client := redis.NewClusterClient(&redis.ClusterOptions{
        Addrs:    []string{"<address>"},
        Password: "<password>",
        OnConnect: func(ctx context.Context, conn *redis.Conn) error {
            ctx, cancel := context.WithTimeout(ctx, 500*time.Millisecond)
            defer cancel()
            return conn.Ping(ctx).Err()
        },
        // Client name for tracking purposes
        ClientName: "go-demo",
        // Use Context for timeout control
        ContextTimeoutEnabled: true,
        // Maximum number of redirects in case of MOVED or ASK
        MaxRedirects: 3,
        // Maximum number of retries
        MaxRetries: 3,
        // Minimum retry backoff
        MinRetryBackoff: 20 * time.Millisecond,
        // Maximum retry backoff
        MaxRetryBackoff: 200 * time.Millisecond,
        // Connection timeout
        DialTimeout: 3 * time.Second,
        // Read timeout
        ReadTimeout: 5 * time.Second,
        // Write timeout
        WriteTimeout: 10 * time.Second,
        // Connection pool size for each node
        PoolSize: 100,
        // Maximum wait time for available connections in the pool
        PoolTimeout: time.Second,
        // Minimum number of idle connections for each node
        MinIdleConns: 5,
        // Maximum number of idle connections for each node
        MaxIdleConns: 10,
        // Maximum number of active connections for each node
        MaxActiveConns: 100,
        // Maximum idle time for connections
        ConnMaxIdleTime: time.Minute * 5,
    })
    defer client.Close()

    if val, err := client.Get(context.TODO(), "test").Result(); err != nil {
        panic(err)
    } else {
        fmt.Println(val)
    }
}

有关更详细的配置,请参阅 Community Documentation