使用集群模式连接
更新时间: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 集群。