Redis学习之--Redis的Java客户端Jedis(九)

一、安装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

猜你喜欢

转载自blog.csdn.net/qq_37358143/article/details/106482697