使用直连地址访问Redis实例
获得直连地址后,您可以绕过代理,用直连模式访问云数据库Redis集群实例,缩短Redis服务的响应时间。本章节以使用Jedis和PhpRedis客户端为例,介绍了直连访问的注意事项和方法。
前提条件
- 开通直连访问。
- 将客户端地址加入Redis白名单。
- 使用Jedis、PhpRedis等支持Redis Cluster的客户端。
- Redis客户端所在的ECS与目标Redis实例在同一VPC网络。
背景信息
注意事项
- 直连地址仅支持通过阿里云内网访问。
- 直连模式支持使用SELECT命令切换DB,但部分Redis Cluster客户端(例如stackExchange.redis)不支持SELECT命令,如果使用该类客户端则只能使用DB0。
- 如需使用多key命令、事务、Lua脚本等修改多个key,需确保这些key分布于同一个hash slot。
说明 多key命令包括DEL、SORT、MGET、MSET、BITOP、EXISTS、MSETNX、RENAME、 RENAMENX、BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH、SMOVE、SUNION、SINTER、SDIFF、SUNIONSTORE、SINTERSTORE、SDIFFSTORE、ZUNIONSTORE、ZINTERSTORE、 PFMERGE、PFCOUNT等。
- 直连模式支持VPC免密和账号密码认证。
Jedis连接代码示例
说明 Jedis使用说明请参见官方文档。
- 使用默认连接池的示例代码
import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; import java.util.HashSet; import java.util.Set; public class DirectTest { private static final int DEFAULT_TIMEOUT = 2000; private static final int DEFAULT_REDIRECTIONS = 5; private static final JedisPoolConfig DEFAULT_CONFIG = new JedisPoolConfig(); public static void main(String args[]){ // 开通直连访问时申请到的直连地址 String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com"; int port = 6379; String password = "xxxx"; Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort(host, port)); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS,password, "clientName", DEFAULT_CONFIG); jc.set("key","value"); jc.get("key"); jc.close(); } }
- 使用自定义连接池的示例代码
import redis.clients.jedis.*; import java.util.HashSet; import java.util.Set; public class main { private static final int DEFAULT_TIMEOUT = 2000; private static final int DEFAULT_REDIRECTIONS = 5; private static final JedisPoolConfig DEFAULT_CONFIG = new JedisPoolConfig(); public static void main(String args[]){ JedisPoolConfig config = new JedisPoolConfig(); // 最大空闲连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数 config.setMaxIdle(200); // 最大连接数, 根据业务需要设置,不能超过实例规格规定的最大的连接数 config.setMaxTotal(300); config.setTestOnBorrow(false); config.setTestOnReturn(false); // 开通直连访问时申请到的直连地址 String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com"; int port = 6379; // 实例的密码 String password = "xxxxx"; Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort(host, port)); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS,password, "clientName", config); try { jc.set("foo", "bar"); String foobar = jc.get("foo"); jc.zadd("sose", 0, "car"); jc.zadd("sose", 0, "bike"); Set<String> sose = jc.zrange("sose", 0, -1); } finally { if (jc != null) { jc.close(); } } } }
PhpRedis连接代码示例
说明 PhpRedis使用说明请参见官方文档。
<?php
// 直连地址和连接端口
$array = ['r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com:6379'];
// 连接密码
$pwd = "xxxx";
// 使用密码连接集群
$obj_cluster = new RedisCluster(NULL, $array, 1.5, 1.5, true, $pwd);
// 输出连接结果
var_dump($obj_cluster);
if ($obj_cluster->set("foo", "bar") == false) {
die($obj_cluster->getLastError());
}
$value = $obj_cluster->get("foo");
echo $value;
?>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论