- jedis.zadd("myzset",99,"alan");
- jedis.zadd("myzset",88,"paul");
- jedis.zadd("myzset",77,"077");
- jedis.zrangeWithScores("myzset",0,-1);
Jedis 连接池
什么是连接池? 举个类比, 线程池是把线程放到便于统一管理的容器里面, 那么连接池就是把连接放到一个容器里面, 方便连接的管理和使用, 达到节省系统资源开销和时间的效果.
如果没有连接池, 在实际应用开发中, 每一次 Jedis 请求都必须经历生成 Jedis 对象, Jedis 执行命令, Jedis 返回执行结果和关闭 Jedis 连接等步骤, 而新建 Jedis 对象, 然后新建连接并打开数据库是一件既消耗资源又费时的工作, 如果频繁发生这种数据库操作, 系统的性能必然会急剧下降, 甚至会导致系统崩溃. 如果运用池化技术, 将连接作为对象存储在一个容器中 (连接池), 一旦连接池建立后, 这些连接是共享的, 极大地节省系统资源和时间, 这就是 Jedis 连接池. 如果之前已经了解过线程池, 我想这儿看着会相当轻松写意.
Jedis 连接池使用主要有以下几个步骤: 创建连接池池, 向连接池借 Jedis 对象, Jedis 执行命令, 返回执行结果, 归还 Jedis 对象给连接池. 具体代码如下:
创建 Jedis 连接池并初始化:
- GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
- JedisPool jedisPool = new JedisPool(poolConfig,"127.0.0.1",6739);
可以看到, JedisPool 大部分配置都在 GenericObjectPoolConfig 中完成的, GenericObjectPoolConfig 参数说明如下表:
参数 | 参数说明 |
maxTotal | 最大连接数,默认 8 个。 |
maxIdle | 最大空闲连接数, 默认 8 个。 |
minIdle | 最小空闲连接数,默认 0 个。 |
maxWaitMillis | 当 borrow(引入) 一个 jedis 实例时,最大的等待时间,如果超过等待时间,则直接抛出 JedisConnectionException。 |
testOnBorrow | 在 borrow 一个 jedis 实例时,是否提前检查连接可用性(ping())操作;如果为 true,则得到的 jedis 实例均是可用的。默认为 false。 |
blockWhenExhausted | 连接耗尽时是否阻塞, false 报异常, ture 阻塞直到超时, 默认 true。 |
testOnReturn | 在 return 一个 jedis 实例时,是否检查连接可用性(ping()),默认为 false。 |
testWhileIdle | 如果为 true,表示有一个 idle object evitor 线程对 idle object 进行扫描,如果 validate 失败,此 object 会被从 pool 中 drop 掉。 这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义。 |
minEvictableIdleTimeMillis | 表示一个对象至少停留在 idle 状态的最短时间,然后才能被 idle object evitor 扫描并驱逐。这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义。 JedisPoolConfig 中默认设置为 60000。 |
timeBetweenEvictionRunsMillis | 表示 idle object evitor 两次扫描之间要 sleep 的毫秒数,默认设置为 30000。 |
创建和初始化 Jedis 连接池以后, 可以从 Jedis 连接池中获取 Jedis 对象, 进而进行操作:
- Jedis jedis = null;
- try{
- //1. 从连接池获取 jedis 对象
- jedis = jedisPool.getResource();
- //2. 执行操作
- jedis.set("hello","world");
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- if(jedis != null){
- // 归还连接池
- jedis.close();
- }
- }
如何选择
Jedis 直连和使用 Jedis 连接池各有所长, 可以根据生产环境的需要因地制宜.
如果是少量的连接, 并且每次连接时间较长, 适合使用 Jedis 直连的方式.
如果是较为频繁的连接则使用 Jedis 连接池.
优点 | 缺点 | |
直连 |
|
|
连接池 |
|
|
来源: https://www.cnblogs.com/sgh1023/p/10351096.html