加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

记一次找因Redis使用不当导致应用卡死Bug的过程

发布时间:2019-10-13 10:07:51 所属栏目:编程 来源:小木
导读:起首说下题目征象:内网sandbox情形API一连1周呈现应用卡死,全部api无相应征象 刚开始当测试诉苦情形相应慢的时辰 ,我们重启一下应用,应用规复正常,于是没做处理赏罚。可是其后题目呈现频率越来越频仍,越来越多的同事开始诉苦,于是感受代码也许有题目,

发明以下代码..

  1. .....  
  2. Cursor c = stringRedisTemplate.getConnectionFactory().getConnection().scan(options);  
  3. while (c.hasNext()) {  
  4. .....,,  
  5.    } 

说明这个代码,stringRedisTemplate.getConnectionFactory().getConnection()获取pool中的redisConnection后,并没有后续操纵,也就是说此时redis 毗连池中的链接被租赁后并没有开释可能退还到链接池中,固然营业已处理赏罚完毕 redisConnection 已经空闲,可是pool中的redisConnection的状态还没有回到idle状态

记一次找因Redis行使不妥导致应用卡死Bug的进程

正常应为

记一次找因Redis行使不妥导致应用卡死Bug的进程

自此题目已经找到。

总结:spring stringRedisTemplate 对redis通例操纵做了一些封装,但还不支持像 Scan SetNx等呼吁,这时必要拿到jedis Connection举办一些非凡的Commands

行使

  1. stringRedisTemplate.getConnectionFactory().getConnection() 

是不被保举的

我们可以行使

  1. stringRedisTemplate.execute(new RedisCallback<Cursor>() {  
  2.      @Override  
  3.      public Cursor doInRedis(RedisConnection connection) throws DataAccessException {  
  4.        return connection.scan(options);  
  5.      }  
  6.    }); 

来执行,

可能行使完connection后 ,用

  1. RedisConnectionUtils.releaseConnection(conn, factory); 

来开释connection.

同时,redis中也不提议行使keys呼吁,redis pool的设置应该公道配上,不然呈现题目无错误日记,无报错,定位相等坚苦。

【编辑保举】

  1. 关于MySQL数据库设置优化的15条提议
  2. 公司有一台很重要SQL数据库,怎样实现数据库及时同步?
  3. 到底要不要行使数据库即处事(DBaaS)?
  4. 国产自研数据库打败 Oracle?网友热议
  5. 什么?Redis的QPS是MySQL的100倍?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读