概述
2019独角兽企业重金招聘Python工程师标准>>>
我们没有正确对待这个SocketTimeoutException异常,即一旦出现SocketTimeoutException异常,我们是必须要废弃掉这个Jedis的。所以对于单线程环境下的Jedis来说,一旦出现这种异常,我们需要重新new一个新的Jedis来使用。
Jedis在内部执行出现异常,如SocketTimeoutException异常的时候,会标记一个boolean broken=true,即意味着该连接已经废弃了。
重要的大坑在这里,我们通常使用JedisPool来应对多线程环境下Jedis的使用,一般使用方式如下:
Jedis jedis = null;//从pool中获取资源 try{ jedis = pool.getResource(); jedis.set("k1", "v1"); }catch(Exception e){ e.printStackTrace(); }finally{ if(jedis != null){ pool.returnResource(jedis);//向连接池“归还”资源,千万不要忘记。 } }
而对于JedisPool,我们会使用returnResource方法来向pool中释放回Jedis,而这个returnResource却忽视了上述boolean broken属性,直接将一个标记废弃的连接放回到了pool中,下次别人取的时候,必然出问题。
http://www.open-open.com/lib/view/open1454502890526.html
http://blog.csdn.net/moxiaomomo/article/details/17588483
转载于:https://my.oschina.net/rouchongzi/blog/799226
最后
以上就是隐形指甲油为你收集整理的Redis异常情况分析的全部内容,希望文章能够帮你解决Redis异常情况分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复