一、安装JDK
tar -zxvf jdk-7u67-linux-i586.tar.gz
vi /etc/profile
重启一次Centos
编码验证
二、安装eclipse
三、Jedis所需要的jar包
commons-pool-1.6.jar
jedis-2.1.0.jar
四、Jedis常用操作,参考代码RedisTest
1、测试连通性ping
2、测试key + 5种数据类型
3、事务提交
4、主从配置(一般没人在代码里配置主从)
五、JedisPool
1、获取Jedis实例需要从JedisPool中获取
2、用完Jedis实例需要返还给JedisPool
3、如果Jedis在使用过程中出错,则也需要还给JedisPool
4、示例:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 模拟单例模式写一个redis池
*
* jar包download地址:http://commons.apache.org/proper/commons-pool/download_pool.cgi
*/
public class JedisPoolUtil {
// 被volatile修饰的变量不会被本地线程缓存,对该变量的读写都是直接操作共享内存。
private static volatile JedisPool jedisPool = null; // 禁止重排序
// 私有构造器
private JedisPoolUtil(){
}
// 双重检查锁的单例模式,保证了线程安全的高效检查
public static JedisPool getJedisPoolInstance() {
if (null == jedisPool) {
synchronized (JedisPoolUtil.class) {
if (null == jedisPool) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数。
poolConfig.setMaxActive(1000); // 高版本废弃了这些方法
// 最大空闲数。低于此值,即使还有空闲资源,也不再进行连接
poolConfig.setMaxIdle(32);
// 最大等待时间。超过此时间,redis抛出异常
poolConfig.setMaxWait(100*1000);
// 获得一个jedis的时候是否检查连接可用性(ping());如果为true,则得到的redis实例均是可用的
poolConfig.setTestOnBorrow(true);
// poolConfig.setMaxTotal(maxTotal); // 高版本使用,如2.9.0.jar
// poolConfig.setMaxIdle(maxIdle);
// poolConfig.setMinIdle(minIdle);
// poolConfig.setTestOnBorrow(testOnBorrow);
// poolConfig.setTestOnReturn(testOnReturn);
// poolConfig.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认为true。
jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
}
}
}
return jedisPool;
}
public static void release(JedisPool jedisPool, Jedis jedis){
if (null != jedis) {
jedisPool.returnResourceObject(jedis); // 要废弃的方法
// jedis.close(); // 高版本
}
}
}
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class TestPool {
public static void main(String[] args) {
JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
Jedis jedis = jedisPool.getResource();
jedis.set("aa", "bb");
System.out.println("--->"+jedis.get("aa"));
JedisPoolUtil.release(jedisPool, jedis);
}
}
JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。---高版本好多都废弃了,比如2.9.0.jar
1、maxActive:最大连接数。控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制。直至抛出异常;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。
2、maxIdle:最大空闲数。低于此值,即使还有空闲资源,也不再进行连接。控制一个pool最多有多少个状态为idle(空闲)的jedis实例。
3、whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作,默认有三种:
WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException;
WHEN_EXHAUSTED_BLOCK --> 表示阻塞住,或者达到maxWait时抛出JedisConnexctionException;
WHEN_EXHAUSTED_GROW --> 表示新建一个jedis实例,也就是说设置的maxActive无用。
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队列;
13、其中JedisPoolConfig对一些参数的默认设置如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1