zoukankan      html  css  js  c++  java
  • jedis操作redis(二)

    下面是关于jedis连接池的配置和一些注意事项:

    public class JedisApiTest2 {
    	// Redis服务器IP
    	private static String ADDR = "127.0.0.1";
    	// Redis的端口号
    	private static int PORT = 6379;
    	// 可用连接实例的最大数目,默认值为8;
    	// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    	private static int MAX_ACTIVE = 1024;
    	// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
    	private static int MAX_IDLE = 200;
    	// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
    	private static int MAX_WAIT = 10000;
    	private static int TIMEOUT = 10000;
    	// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
    	private static boolean TEST_ON_BORROW = true;
    	private JedisPool jedisPool = null;
    
    	/**
    	 * 在高版本的jedis
    	 * jar包,比如2.8.2,我们在使用中发现使用JedisPoolConfig时,没有setMaxActive和setMaxWait属性了,这是因为高版本中官方废弃了此方法,用以下两个属性替换。
    	 * maxActive ==> maxTotal 
    	 * maxWait ==> maxWaitMillis
    	 */
    
    	@Before
    	public void setup() {
    		JedisPoolConfig config = new JedisPoolConfig();
    		config.setMaxIdle(MAX_IDLE);
    		config.setMaxTotal(MAX_ACTIVE);// 这个是以前的maxActive
    		config.setMaxWaitMillis(MAX_WAIT);
    		config.setTestOnBorrow(TEST_ON_BORROW);
    		jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, null);
    	}
    
    	@SuppressWarnings("deprecation")
    	@Test
    	public void test() {
    		Jedis jedis = jedisPool.getResource();
    		jedis.set("testPool", "aaa");
    		Assert.assertEquals("aaa", jedis.get("testPool"));
    		
    		//jedisPool.returnResource(jedis);// 此方法已经过时 百度了一下 说截止16年11月1日,jedis官方现在最高版本为2.9.0 而jedis.close()取代pool.returnResource(Jedis)方法将3.0版本开始,所以暂时只能使用后者。
                    jedis.close(); //在查看 jedis 2.9.0 中close源码之后 感觉可以使用close来释放连接
    	}
    	/**
    	 * JedisPool的配置参数由JedisPoolConfig的对应项来赋值的。
    	 * maxActive:控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。
    	 * maxIdle:控制一个pool最多有多少个状态为idle(空闲)的jedis实例;
    	 * whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作;默认有三种。
    	 * WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException;
    	 * WHEN_EXHAUSTED_BLOCK --> 则表示阻塞住,或者达到maxWait时抛出JedisConnectionException;
    	 * WHEN_EXHAUSTED_GROW --> 则表示新建一个jedis实例,也就说设置的maxActive无用;
    	 * maxWait:表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
    	 * testOnBorrow:在borrow一个jedis实例时,是否提前进行Validate操作;如果为true,则得到的jedis实例均是可用的;
    	 * testOnReturn:在return给pool时,是否提前进行validate操作;
    	 * testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
    	 * timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数;
    	 * numTestsPerEvictionRun:表示idle object evitor每次扫描的最多的对象数;
    	 * minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
    	 * softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少min Idle个对象已经在pool里面了。如果为-1,evicted不会根据idle time驱逐任何对象。如果minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义;
    	 * lifo:borrowObject返回对象时,是采用DEFAULT_LIFO(last in first out,即类似cache的最频繁使用队列),如果为False,则表示FIFO队列;
    	 * 其中JedisPoolConfig对一些参数的默认设置如下:
    	 * testWhileIdle=true 
    	 * minEvictableIdleTimeMills=60000
    	 * timeBetweenEvictionRunsMillis=30000
    	 * numTestsPerEvictionRun=-1
    	 */
    }
    
  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/joeCqupt/p/6803813.html
Copyright © 2011-2022 走看看