有奖捉虫:行业应用 & 管理与支持文档专题 HOT

准备工作

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

代码示例

连接池代码示例及其中各个参数的含义,如下所示:
说明:
解决连接不均的问题,请设置最大连接数,最小空闲连接数,最大空闭连接数相同,避免连接用完回到连接池时断连和新建连接。业务根据自己的需要设置相应的值。
参数
含义
建议
setMaxTotal
连接池中的最大连接数。
设置该参数,需要考虑业务并发量、访问延迟、最大连接数等因素。
setMaxIdle
连接池最大空闲连接数。
建议与 setMaxTotal 相同。
setMinIdle
资源池允许的最小空闲连接数。
建议与 setMaxTotal 相同。
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);
// 解决请求不均,设置连接池方式为队列,设置 lifo 为false。
// false:后进后出即从队头拿连接,从队尾放连接;true: 后进先出即从队头拿连接,从头放连接,永远拿的是最热连接不推存。
config.setLifo(false);
//设置最小连接检查
config.setTimeBetweenEvictionRunsMillis(3000);
// 分别将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);
}
}