目录
一、Jedis
1.Jedis简介
2.导包
3.官方文档
4.常用API
5.基本操作
6.jedis连接池的使用
7.工具类的编写
8.简单的使用
9.JedisPoolConfig的配置参数
一、Jedis
1.Jedis简介
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。
2.导包
3.官方文档
http://xetorthio.github.io/jedis/
4.常用API
5.基本操作
@Test
public void testJedisSingle(){
//1 设置ip地址和端口
Jedis jedis = new Jedis("localhost", 6379);
//2 设置数据
jedis.set("name", "itheima");
//3 获得数据
String name = jedis.get("name");
System.out.println(name);
//4 释放资源
jedis.close();
}
6.jedis连接池的使用
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
7.工具类的编写
package com.itheima.utils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolUtils {
被volatile修饰的变量不会被本地线程缓存,对该变量的读写都是直接操作共享内存。
private static volatile JedisPool jedisPool;
private JedisPoolUtils() {
}
//获得连接池对象
public static JedisPool getJedisPoolInstance(){
if(jedisPool==null){
synchronized (JedisPoolUtils.class){
if(jedisPool==null){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(30);
config.setMaxIdle(10);
jedisPool=new JedisPool(config,"127.0.0.1",6379);
}
}
}
return jedisPool;
}
//归还连接
public static void release(JedisPool jedisPool,Jedis jedis){
if(jedis!=null){
jedisPool.returnResource(jedis);
}
}
}
8.简单的使用
public static void main(String[] args) {
JedisPool pool = JedisPoolUtils.getJedisPoolInstance();
JedisPool pool1 = JedisPoolUtils.getJedisPoolInstance();
System.out.println(pool==pool1);//true,为同一连接池
//得到连接
Jedis resource = pool.getResource();
System.out.println(resource.get("balance"));
JedisPoolUtils.release(pool,resource);
}
9.JedisPoolConfig的配置参数
(1)maxActive:控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。
(2)maxIdle:控制一个pool最多有多少个状态为idle(空闲)的jedis实例;
(3)whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作;默认有三种。
(4)maxWait:表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛JedisConnectionException;
(5)testOnBorrow:获得一个jedis实例的时候是否检查连接可用性(ping());如果为true,则得到的jedis实例均是可用的;
(6)testOnReturn:return 一个jedis实例给pool时,是否检查连接可用性(ping());
(7)testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
(8)timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数;
(9)numTestsPerEvictionRun:表示idle object evitor每次扫描的最多的对象数;
(10)minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
(11)softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少minIdle个对象已经在pool里面了。如果为-1,evicted不会根据idle time驱逐任何对象。如果minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义;
(12)lifo:borrowObject返回对象时,是采用DEFAULT_LIFO(last in first out,即类似cache的最频繁使用队列),如果为False,则表示FIFO队列;
=======================================================================================================
其中JedisPoolConfig对一些参数的默认设置如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1