更新时间:2024-10-30 GMT+08:00

通过Jedis连接实例

本章节介绍使用Jedis(JAVA客户端)访问GeminiDB Redis实例的方法。

由于GeminiDB Redis的“Proxy集群”架构提供了统一的负载均衡地址,并提供高可用能力,因此推荐使用JedisPool单机模式轻松接入。

此外,GeminiDB Redis对JedisSentinelPool、JedisCluster两种模式也提供支持。

前提条件

  • 已成功创建GeminiDB Redis实例,且实例状态正常。创建GeminiDB Redis实例的方法请参见购买实例(集群版)
  • 已创建弹性云服务器,创建弹性云服务器的方法,请参见《弹性云服务器快速入门》中“购买弹性云服务器”章节。
  • 弹性云服务器上已经安装GCC等编译工具。
  • 创建的弹性云服务器GeminiDB Redis实例要保证区域、可用区、VPC和安全组一致。

使用JedisPool访问(推荐)

样例代码

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisPoolTests {

  private static void testPool() {
    // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全;
    // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
    String pwd = System.getenv("EXAMPLE_PASSWORD_ENV");
    JedisPool pool = new JedisPool(new GenericObjectPoolConfig(), "172.xx.xx.xx", 8635,
        2000, pwd);
    Jedis jedis = pool.getResource();
    try {
      System.out.println(jedis.hgetAll("676296"));
      System.out.println(jedis.set("key1", "value1"));
    } finally {
      jedis.close();
    }
    pool.destroy();
  }

  public static void main(String[] args) {
    testPool();
  }
}
  • 上述代码中“172.xx.xx.xx”为待连接GeminiDB Redis实例的负载均衡地址。

    您可以单击实例名称,进入“基本信息”页面,在网络信息区域获取“负载均衡地址”。

    图1 查看负载均衡地址
  • 上述代码中的“8635”为待连接GeminiDB Redis实例的端口,具体请以实际端口为准。获取端口的方法请参见查看IP地址和端口
  • GeminiDB Redis支持与限制的命令,详情请参见开发运维规范
  • 由于GeminiDB Redis和开源Redis集群计算hash算法不同,因此GeminiDB Redis的部分命令需要给对应的key打上hash tag,否则会出现非预期的行为。hash tag使用建议参考开发运维规范

使用JedisCluster访问

样例代码

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

public class ClusterTests {

  private static void testCluster() {
    String pwd = "a";
        JedisCluster cluster = new JedisCluster(new HostAndPort("172.xx.xx.xx", 8635),
        200, 2000, 5, pwd, new GenericObjectPoolConfig());
    System.out.println(cluster.hgetAll("676296"));
    System.out.println(cluster.set("key1", "value1"));
  }

  public static void main(String[] args) {
    testCluster();
  }
}
  • 上述代码中“172.xx.xx.xx”为待连接GeminiDB Redis实例的负载均衡地址。

    您可以单击实例名称,进入“基本信息”页面,在网络信息区域获取“负载均衡地址”。

    图2 查看负载均衡地址
  • 上述代码中的“8635”为待连接GeminiDB Redis实例的端口,具体请以实际端口为准。获取端口的方法请参见查看IP地址和端口
  • GeminiDB Redis支持与限制的命令,详情请参见开发运维规范
  • 由于GeminiDB Redis和开源Redis集群计算hash算法不同,因此GeminiDB Redis的部分命令需要给对应的key打上hash tag,否则会出现非预期的行为。hash tag使用建议参考开发运维规范

使用JedisSentinelPool访问

样例代码

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashSet;
import java.util.Set;

public void SentinelTest {
    public static void main(String[] args) {
        GenericObjectPoolConfig<Jedis> config = new GenericObjectPoolConfig<Jedis>();
        Set<String> mySentinels = new HashSet<String>();
        mySentinels.add("172.xx.xx.xx:8635");
        JedisSentinelPool pool = new JedisSentinelPool(master-name, mySentinels, config, 1000, password, 0);
        Jedis jedis = pool.getResource();
        jedis.auth(password);
        jedis.set("foo", "bar");
        String s = jedis.get("foo");
        System.out.println(s);
        jedis.close();
        pool.close();
    }
}
  • 上述代码中“172.xx.xx.xx”为待连接GeminiDB Redis实例的负载均衡地址。

    您可以单击实例名称,进入“基本信息”页面,在网络信息区域获取“负载均衡地址”。

    图3 查看负载均衡地址
  • 上述代码中的“8635”为待连接GeminiDB Redis实例的端口,具体请以实际端口为准。获取端口的方法请参见查看IP地址和端口
  • 上述代码中的master-name只能是“mymaster”。
  • GeminiDB Redis支持与限制的命令,详情请参见开发运维规范
  • 由于GeminiDB Redis和开源Redis集群计算hash算法不同,因此GeminiDB Redis的部分命令需要给对应的key打上hash tag,否则会出现非预期的行为。hash tag使用建议参考开发运维规范