使用集群模式连接
更新时间:2024-07-31
简介
智能云 Redis 集群版支持使用 Redis clutser 模式连接,部分此前使用 redis cluster 客户端的用户在迁移至云数据库 Redis 后,可无需修改代码,仅将入口修改为云数据库 Redis 集群入口即可。对应新业务,或可以对已有代码做改动的客户,我们推荐使用单机版的连接方式接入云数据库 Redis 集群。
背景信息
云数据库 Redis 采用基于代理的 Redis 集群方案,客户端连接经由负载均衡器连接到 Proxy 上,后续客户端的请求将由 Proxy 负责路由到对应的 Redis 分片上。其结构如下:
为了兼容 redis cluster 连接模式,Proxy 对外将自己伪装为一个单分片的 redis cluster 集群,以此实现对 redis cluster 连接模式的兼容。
主流客户端示例
go-redis
连接示例代码:
host := "redis.*******.scs.bj.baidubce.com"
port := 6379
password := "*****"
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{fmt.Sprintf("%s:%d", host, port)},
Password: password,
})
var ctx = context.Background()
_ = rdb.Set(ctx, "key", "value", 0).Err()
val, _ := rdb.Get(ctx, "key").Result()
if val != "value" {
panic("")
}
Jedis
下面是使用 Redis cluster 连接云数据库 Redis 集群的示例:
String host = "redis.*******.scs.bj.baidubce.com";
int port = 6379;
String password = "*****";
HostAndPort hostAndPort = new HostAndPort(host, port);
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(hostAndPort);
try (JedisCluster cluster = new JedisCluster(nodes, "default", password)) {
cluster.set("client", "jedis");
assert cluster.get("client").equals("jedis");
} catch (Exception e) {
e.printStackTrace();
}
lettuce
使用 Cluster 模式连接实例代码:
String host = "redis.*******.scs.bj.baidubce.com";
int port = 6379;
String password = "*****";
RedisURI uri = RedisURI.builder().withHost(host).withPort(port).withPassword(password).build();
RedisClusterClient client = RedisClusterClient.create(uri);
StatefulRedisClusterConnection<String, String> connection = client.connect();
RedisStringCommands<String, String> sync = connection.sync();
sync.set("client", "lettuce");
String value = sync.get("client");
assert value.equals("lettuce");
redis-py
使用 Cluster 模式连接示例:
import redis
host = "redis.*******.scs.bj.baidubce.com"
port = 6379
password = "*****"
client = redis.RedisCluster(host=host, port=port, password=password)
client.set("client", "redis")
assert client.get("client") == b"redis"
assert client.get("client").decode() == "redis"
node-redis
使用 Cluster 模式连接示例:
import { createCluster } from 'redis';
let host = "redis.*******.scs.bj.baidubce.com";
let port = 6379;
let password = "*****";
const client = createCluster({
rootNodes: [{
url: `redis://${host}:${port}`
}],
defaults: {
password: password,
}
})
client.on('error', err => console.log('Redis Client Error', err));
await client.connect();
await client.set('key', 'value');
const value = await client.get('key');
console.log(value) // "value"
await client.disconnect();
php-redis
示例代码:
<?php
$host = 'redis.*******.scs.bj.baidubce.com';
$port = 8108;
$password = "*****";
$cluster = new RedisCluster(NULL, Array($host . ':' . $port), 1.5, 1.5, true, $password);
$cluster->set("def", "DEF");
assert($cluster->get("def") == "DEF");
?>
以上示例展示了使用不同编程语言的主流 SDK,使用 redis cluster 模式连接到 Redis 集群的方式,但我们更推荐使用单机版的连接方式接入云数据库 Redis 集群。