Jedis使用demo示例

最近更新时间: 2024-06-12 15:06:00

准备工作

下载客户端 Jedis ,推荐使用最新版本。

短连接

短连接连接数据库的代码示例,如下所示。

import redis.clients.jedis.Jedis;
public class HelloRedis {
  public static void main(String[] args) {
        try {
            String host = "192.xx.xx.195";
            int port = 6379;
            String password = "123ad6aq";
            //连接 Redis
            Jedis jedis = new Jedis(host, port);
            //鉴权
            jedis.auth(password);
            /**接下来可以开始操作 Redis 实例,可以参考                 https://github.com/xetorthio/jedis */
            //设置 Key
            jedis.set("redis", "tencent");
            System.out.println("set key redis suc, value is: tencent");
            //获取 Key
            String value = jedis.get("redis");
            System.out.println("get key redis is: " + value);
            //关闭退出
            jedis.quit();
            jedis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

连接池

连接池代码示例如下所示,其中各个参数的含义,请参见下表所示。

参数 含义 建议
setMaxTotal 资源池中的最大连接数。设置该业务并发量;客户端能希望的访问延迟;服务端能支撑的连接数。
设置该参数,需要考虑业务并发量、访问延迟、最大连接数等因素
- 如果服务端使用的标准版实例,CRedis会默认提供1万连接。客户端部署了10台机器,那么单台配置就不超过10000/10=1000。
- 如果业务希望耗时能全部在2ms内返回,单个连接的QPS就是1s/2ms=500qps。如果业务侧需要并发10万QPS,那么就需要100000/500=200总连接数。根据客户侧部署的规格数量,比如部署2台机器,那么配置就必须大于100。
setMaxIdle 连接池最大空闲连接数,既业务需要的最大连接数。一般推荐与Maxtotal相同。 一般推荐与 setMaxTotal 相同。
setMinIdle 资源池允许的最小空闲连接数。 该参数设置过大导致连接池浪费,建议为 setMaxTotal 的5%-10%。
timeout 超时时间。 该参数需要根据业务模型及网络链路性能设置。
- 一般网络延迟较低,服务耗时非常敏感的业务,可以设置50-100ms。
- 如果业务容忍度高,或者业务访问kv数据较大,可以设置500ms、1000ms。
setTestOnBorrow
设置在从连接池中获取连接时是否进行连接测试。
- 如果设置为 true,则在获取连接时会调用 connection.isValid()方法进行连接测试,以确保获取到的连接是可用的。但同时会消耗QPS性能。
- 如果设置为 false,则不会进行连接测试,可以提高连接获取的速度,但是可能会获取到不可用的连接。
setTestOnReturn 设置将连接归还连接池时,是否进行校验。 - 如果设置为 true,则在归还连接时会调用 connection.isValid()
方法进行连接测试,以确保归还的连接是可用的。
- 如果设置为 false,则不会进行连接测试,可以提高归还连接的速度,但是可能会归还不可用的连接。通常情况下建议设置为 true
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 = "192.xx.xx.195";
String password = "123ad6aq";
//读写超时(单位为毫秒)
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", "tencent");
    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);
    }
}