使用集群模式连接
更新时间:2025-02-18
简介
智能云 Redis 集群版支持使用 Redis clutser 模式连接,部分此前使用 redis cluster 客户端的用户在迁移至云数据库 Redis 后,可无需修改代码,仅将入口修改为云数据库 Redis 集群入口即可。对应新业务,或可以对已有代码做改动的客户,我们推荐使用单机版的连接方式接入云数据库 Redis 集群。
背景信息
云数据库 Redis 采用基于代理的 Redis 集群方案,客户端连接经由负载均衡器连接到 Proxy 上,后续客户端的请求将由 Proxy 负责路由到对应的 Redis 分片上。其结构如下:

为了兼容 redis cluster 连接模式,Proxy 对外将自己伪装为一个单分片的 redis cluster 集群,以此实现对 redis cluster 连接模式的兼容。
使用限制
目前集群模式连接不支持公网访问。
主流客户端示例
go-redis
连接示例代码:
                Go
                
            
            1host := "redis.*******.scs.bj.baidubce.com"
2port := 6379  
3password := "*****"  
4rdb := redis.NewClusterClient(&redis.ClusterOptions{  
5   Addrs:    []string{fmt.Sprintf("%s:%d", host, port)},
6   Password: password,  
7})
8var ctx = context.Background()
9_ = rdb.Set(ctx, "key", "value", 0).Err()  
10val, _ := rdb.Get(ctx, "key").Result()  
11if val != "value" {  
12   panic("")  
13}Jedis
下面是使用 Redis cluster 连接云数据库 Redis 集群的示例:
                Java
                
            
            1String host = "redis.*******.scs.bj.baidubce.com";
2int port = 6379;  
3String password = "*****"; 
4HostAndPort hostAndPort = new HostAndPort(host, port);  
5Set<HostAndPort> nodes = new HashSet<>();  
6nodes.add(hostAndPort);  
7try (JedisCluster cluster = new JedisCluster(nodes, "default", password)) {  
8    cluster.set("client", "jedis");  
9    assert cluster.get("client").equals("jedis");  
10} catch (Exception e) {  
11    e.printStackTrace();  
12}lettuce
使用 Cluster 模式连接实例代码:
                Java
                
            
            1String host = "redis.*******.scs.bj.baidubce.com";
2int port = 6379;  
3String password = "*****";
4RedisURI uri = RedisURI.builder().withHost(host).withPort(port).withPassword(password).build();  
5RedisClusterClient client = RedisClusterClient.create(uri);  
6StatefulRedisClusterConnection<String, String> connection = client.connect();
7RedisStringCommands<String, String> sync = connection.sync();
8sync.set("client", "lettuce");  
9String value = sync.get("client");  
10assert value.equals("lettuce");redis-py
使用 Cluster 模式连接示例:
                Python
                
            
            1import redis
2host = "redis.*******.scs.bj.baidubce.com"
3port = 6379
4password = "*****"
5client = redis.RedisCluster(host=host, port=port, password=password)
6client.set("client", "redis")
7assert client.get("client") == b"redis"
8assert client.get("client").decode() == "redis"node-redis
使用 Cluster 模式连接示例:
                JavaScript
                
            
            1import { createCluster } from 'redis';
2let host = "redis.*******.scs.bj.baidubce.com";
3let port = 6379;
4let password = "*****";
5const client = createCluster({
6    rootNodes: [{
7        url: `redis://${host}:${port}`
8    }],
9    defaults: {
10        password: password,
11    }
12})
13client.on('error', err => console.log('Redis Client Error', err));
14await client.connect();
15await client.set('key', 'value');
16const value = await client.get('key');
17console.log(value) // "value"
18await client.disconnect();php-redis
示例代码:
                PHP
                
            
            1<?php
2    $host = 'redis.*******.scs.bj.baidubce.com';
3    $port = 8108;
4    $password = "*****";
5    $cluster = new RedisCluster(NULL, Array($host . ':' . $port), 1.5, 1.5, true, $password);
6    $cluster->set("def", "DEF");
7    assert($cluster->get("def") == "DEF");
8?>以上示例展示了使用不同编程语言的主流 SDK,使用 redis cluster 模式连接到 Redis 集群的方式,但我们更推荐使用单机版的连接方式接入云数据库 Redis 集群。
