1、JedisUtil类
2、测试类
3、测试日志(模拟出现竞争情况)
import org.apache.log4j.Logger; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisUtil { protected static Logger logger = Logger.getLogger(JedisUtil.class); // Redis server IP private static String HOST_LIST = "192.168.0.123"; // Redis port private static int PORT = 6379; // auth private static String PASS = "jiangtao"; private static int MAX_ACTIVE = 10; private static int MAX_IDLE = 2; private static boolean TEST_ON_BORROW = false; private static int MAX_WAIT = 3000; private static int TIMEOUT = 100000; private static JedisPool jedisPool = null; /** * initial Pool */ private static synchronized void init_pool() { if (jedisPool == null) { try { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(MAX_ACTIVE); config.setMaxIdle(MAX_IDLE); config.setMaxWaitMillis(MAX_WAIT); config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, HOST_LIST.split(",")[0], PORT, TIMEOUT, PASS); } catch (Exception e) { logger.error("First create JedisPool error : " + e); try { // 如果第一个IP异常,则访问第二个IP JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(MAX_ACTIVE); config.setMaxIdle(MAX_IDLE); config.setMaxWaitMillis(MAX_WAIT); config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, HOST_LIST.split(",")[1], PORT, TIMEOUT, PASS); } catch (Exception e2) { logger.error("Second create JedisPool error : " + e2); } } } } public synchronized static Jedis getJedis() { if (jedisPool == null) { init_pool(); } Jedis jedis = null; try { if (jedisPool != null) { jedis = jedisPool.getResource(); } } catch (Exception e) { System.out.println("no remain redis from pool"); } return jedis; } /** * 释放jedis资源 * * * * @param jedis */ public static void returnResource(final Jedis jedis) { if (jedis != null && jedisPool != null) { jedis.close(); } } }
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import redis.clients.jedis.Jedis; public class Test { public static void main(String[] args) { for (int i = 0; i < 1000; i++) { Test_Thread t = new Test_Thread(i); t.start(); } } } class Test_Thread extends Thread { int i = 0; public Test_Thread(int i) { this.i = i; } public void run() { Date date = new Date(); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = format.format(date); Jedis obj = JedisUtil.getJedis(); String value = null; if (obj != null) { obj.set("test",time); try { sleep(10000); } catch (InterruptedException e) { System.out.println("sleep error"); } value = obj.get("test"); Date date2 = new Date(); String time2 = format.format(date2); System.out.println("【输出>>>>】test:" + value + " 第:" + i + "个线程" + "当前时间:" + time2); } JedisUtil.returnResource(obj); // JedisUtil.setString("test", time); } }
no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:13个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:999个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:995个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:991个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:987个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:983个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:979个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:975个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:971个线程当前时间:2018-07-22 10:38:29 【输出>>>>】test:2018-07-22 10:38:19 第:967个线程当前时间:2018-07-22 10:38:29 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:951个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:947个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:952个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:943个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:997个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:993个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:989个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:985个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:981个线程当前时间:2018-07-22 10:38:39 【输出>>>>】test:2018-07-22 10:38:19 第:977个线程当前时间:2018-07-22 10:38:39 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:998个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:994个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:990个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:986个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:982个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:978个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:974个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:970个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:996个线程当前时间:2018-07-22 10:38:49 【输出>>>>】test:2018-07-22 10:38:19 第:992个线程当前时间:2018-07-22 10:38:49 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:976个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:972个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:968个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:966个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:964个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:960个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:962个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:961个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:956个线程当前时间:2018-07-22 10:38:59 【输出>>>>】test:2018-07-22 10:38:19 第:958个线程当前时间:2018-07-22 10:38:59 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:948个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:953个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:925个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:938个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:937个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:935个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:936个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:950个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:934个线程当前时间:2018-07-22 10:39:09 【输出>>>>】test:2018-07-22 10:38:19 第:933个线程当前时间:2018-07-22 10:39:09 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:945个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:923个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:944个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:919个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:940个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:942个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:932个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:941个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:930个线程当前时间:2018-07-22 10:39:19 【输出>>>>】test:2018-07-22 10:38:19 第:929个线程当前时间:2018-07-22 10:39:19 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:917个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:918个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:898个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:913个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:895个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:915个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:893个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:926个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:855个线程当前时间:2018-07-22 10:39:29 【输出>>>>】test:2018-07-22 10:38:19 第:924个线程当前时间:2018-07-22 10:39:29 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:908个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:882个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:775个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:914个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:901个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:916个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:877个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:837个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:897个线程当前时间:2018-07-22 10:39:39 【输出>>>>】test:2018-07-22 10:38:19 第:912个线程当前时间:2018-07-22 10:39:39 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:907个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:889个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:910个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:885个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:909个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:884个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:886个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:883个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:881个线程当前时间:2018-07-22 10:39:49 【输出>>>>】test:2018-07-22 10:38:19 第:880个线程当前时间:2018-07-22 10:39:49 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:906个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:875个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:902个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:863个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:905个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:859个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:800个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:851个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:903个线程当前时间:2018-07-22 10:39:59 【输出>>>>】test:2018-07-22 10:38:19 第:904个线程当前时间:2018-07-22 10:39:59 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:845个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:894个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:809个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:838个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:896个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:796个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:899个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:874个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:872个线程当前时间:2018-07-22 10:40:10 【输出>>>>】test:2018-07-22 10:38:19 第:873个线程当前时间:2018-07-22 10:40:10 no remain redis from pool no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:821个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:891个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:782个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:826个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:825个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:824个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:829个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:816个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:890个线程当前时间:2018-07-22 10:40:20 【输出>>>>】test:2018-07-22 10:38:19 第:765个线程当前时间:2018-07-22 10:40:23 no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:818个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:887个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:843个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:819个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:878个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:803个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:811个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:807个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:876个线程当前时间:2018-07-22 10:40:30 【输出>>>>】test:2018-07-22 10:38:19 第:795个线程当前时间:2018-07-22 10:40:33 no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:791个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:779个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:835个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:771个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:814个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:810个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:839个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:774个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:763个线程当前时间:2018-07-22 10:40:40 【输出>>>>】test:2018-07-22 10:38:19 第:759个线程当前时间:2018-07-22 10:40:43 no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:856个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:854个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:857个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:755个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:862个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:861个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:864个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:858个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:860个线程当前时间:2018-07-22 10:40:50 【输出>>>>】test:2018-07-22 10:38:19 第:853个线程当前时间:2018-07-22 10:40:53 no remain redis from pool no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:848个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:850个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:806个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:743个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:846个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:844个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:842个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:841个线程当前时间:2018-07-22 10:41:00 【输出>>>>】test:2018-07-22 10:38:19 第:840个线程当前时间:2018-07-22 10:41:00 no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:712个线程当前时间:2018-07-22 10:41:05 no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:727个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:704个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:725个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:834个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:798个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:726个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:801个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:722个线程当前时间:2018-07-22 10:41:10 【输出>>>>】test:2018-07-22 10:38:19 第:833个线程当前时间:2018-07-22 10:41:10 no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:699个线程当前时间:2018-07-22 10:41:15 no remain redis from pool 【输出>>>>】test:2018-07-22 10:38:19 第:797个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:679个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:832个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:667个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:817个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:830个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:786个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:828个线程当前时间:2018-07-22 10:41:20 【输出>>>>】test:2018-07-22 10:38:19 第:706个线程当前时间:2018-07-22 10:41:20