JAVA连接示例

最近更新时间: 2026-03-13 09:03:00

本文列举客户端 Java 代码示例,辅助您使用 SSL 加密或不加密的方式访问数据库。

准备工作

  • 在 Redis 控制台 的实例详情页面的网络信息区域,获取连接数据库的内网 IPv4 地址及端口。具体信息,请参见 查看实例详情
  • 已获取访问数据库的账号与密码。具体操作,请参见 账号管理
  • 下载客户端 Jedis,推荐使用最新版本。
  • 如果使用 SSL 加密方式连接数据库,请 SSL 加密,获取 SSL 认证证书文件。

SSL 不加密方式连接示例

您需要根据注释修改参数:连接数据库的 IP、端口及账号密码信息。

import redis.clients.jedis.Jedis;

public class HelloRedis {

  public static void main(String[] args) {
        try {
            /**以下参数,如果为内网访问,分别填写您的 Redis 实例内网 IP、端口号、实例 ID 和密码;
                        如果为外网访问,分别配置实例外网地址、端口号及其密码,无需设置实例 ID*/
            String host = "192.xx.xx.195";
            int port = 6379;
            String instanceid = "crs-09xxxqv";
            String password = "123ad6aq";
            //连接 Redis
            Jedis jedis = new Jedis(host, port);
            //鉴权
            jedis.auth(instanceid + ":" + password);

            /**接下来可以开始操作 Redis 实例,可以参考 https://github.com/xetorthio/jedis */
            //设置 Key
            jedis.set("redis", "abc");
            System.out.println("set key redis suc, value is: abc");
            //获取 Key
            String value = jedis.get("redis");
            System.out.println("get key redis is: " + value);

            //关闭退出
            jedis.quit();
            jedis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果,如下所示。
img

SSL 加密方式连接示例

您需要根据注释修改参数:SSL 证书文件、连接数据库的 IP、端口及账号密码信息。

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

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.SecureRandom;

public class Main {

    public static void main(String[] args) throws Exception {
        KeyStore trustStore = KeyStore.getInstance("jks");
        //ca.jks 为证书文件名称。
        try (InputStream inputStream = new FileInputStream("ca.jks") ){
            trustStore.load(inputStream, null);
        }
        TrustManagerFactory trustManagerFactory =      TrustManagerFactory.getInstance("PKIX");
        trustManagerFactory.init(trustStore);
        TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustManagers, new SecureRandom());
        SSLSocketFactory sslSocketFactory =  sslContext.getSocketFactory();
        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();

        //with ssl config jedis pool
        //vip 为连接数据库的内网 IPv4 地址,6379为默认的端口号,pwd 为默认账号的密码。您需根据实际情况替换。
        JedisPool pool = new JedisPool(genericObjectPoolConfig, "vip",
                6379, 2000, "pwd", 0, true, sslSocketFactory, null, null);
        Jedis jedis = pool.getResource();
        System.out.println(jedis.ping());
        jedis.close();
    }
}

连接池方式接入(推荐方式)

package com.example.demo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.Set;

public class Main {
    public static void main(String[] args) {
        JedisPoolConfig config = new JedisPoolConfig();
// 最大空闲连接数,需自行评估,不超过Redis实例的最大连接数
        config.setMaxIdle(200);
// 最大连接数,需自行评估,不超过Redis实例的最大连接数
        config.setMaxTotal(200);
//资源池允许的最小空闲连接数
        config.setMinIdle(20);
//当资源池连接用尽后,调用者的最大等待时间(单位为毫秒)
        config.setMaxWaitMillis(3000);
//从连接池中获取对象时,会先进行ping检查,检查不通过,会从连接池中移走并销毁。
        config.setTestOnBorrow(false);
//归还连接时,会进行检查,检查不通过,则销毁。
        config.setTestOnReturn(false);
// 分别将host和password的值替换为实例的连接地址、密码
        String host = "xxx.xxx.xxx.xxx";
        String password = "123456";
//读写超时(单位为毫秒)
        int timeout = 2000;
        int port = 6379;
        JedisPool pool = new JedisPool(config, host, port, timeout, password);
        Jedis jedis = null;
        boolean broken = false;
        try {
            jedis = pool.getResource();
            /// ... do stuff here ... for example
            jedis.set("redis", "abc");
            String foobar = jedis.get("redis");
            jedis.zadd("tec", 0, "a");
            jedis.zadd("tec", 0, "b");
            Set<String> sose = jedis.zrange("tec", 0, -1);
        } catch (Exception e) {
            broken = true;
        } finally {
            if (broken) {
                pool.returnBrokenResource(jedis);
            } else if (jedis != null) {
                pool.returnResource(jedis);
            }
        }

    }
}