redis pool使用后又一次节省了大量获取连接的时间

1.  之前没有用redis pool的时候,一直没有觉得jedis.close()和jedis.disconnect()有多大区别。测试觉得没啥区别。

2. 今天没有用redis pool,然后把本地的map数据同步到服务器上(counter数据同步,存在的field则incr其值)。

3. 结果没有redis pool,更新到线上服务器的一个counter map(1400多个field),用时40多分钟!

4. 从console可以看到大部分时间是花在了获得服务器上redis连接上了。

5. 吓得我一下子不敢同步第二个counter map了。

6. 赶紧把本地的redis pool依赖的jar包配置好路劲。然后启动ide,修改好代码了,准备测试前,发现配置文件没有放啊!

7. 于是临时修改好配置文件,测试,居然可以起来!

8. 然后突然意识到 jedis.disconnect() 没有修改成 jedis.close()。一看console,果然还是很慢!!

9. 结果跑了一百多个field,马上报出如下错误!

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

10. 这下把自己给害惨了。本来一个counter map,要么全更新完,要么全不更新啊,更新了一点就出问题。。。麻烦了。

11. 于是赶紧修改成redis.close()。接着从console获取出所以已经修改的counter map里面的field。

然后按照逗号拼成String str1,在获取到field时判断是否已存在于str1,不存在才更新到线上服务器的counter map 里:

CharSequence cs1 = (CharSequence)campaign_id;

// string contains the specified sequence of char values

boolean retval = str1.contains(cs1);

if(retval){

System.out.println("key : " + cs1 + " -> already exists : " + retval );

}

else{...}

12. 这一次运行起来就快多了.不到十分钟数据就更新好了!果然是连接池的好处不少啊!而且以后肯定写close而不谢disconnect啊!!

你可能感兴趣的:(redis pool使用后又一次节省了大量获取连接的时间)