当前位置: 首页 > wzjs >正文

vs做网站如何输出外贸怎么找客户资源

vs做网站如何输出,外贸怎么找客户资源,app公司是做什么的,怎么给网站做开场动画文章目录 问题现象栈溢出(不断的重连)读取超时未知响应尝试读取损坏的链接读取到的数据和自己要读的无关,导致空指针、类型转换错误,数据读取错乱 问题写法问题分析修复注意点 问题现象 栈溢出(不断的重连&#xff09…

文章目录

    • 问题现象
      • 栈溢出(不断的重连)
      • 读取超时
      • 未知响应
      • 尝试读取损坏的链接
      • 读取到的数据和自己要读的无关,导致空指针、类型转换错误,数据读取错乱
    • 问题写法
    • 问题分析
    • 修复
    • 注意点

问题现象

栈溢出(不断的重连)

		at redis.clients.jedis.Connection.sendCommand(Connection.java:163)at redis.clients.jedis.Connection.sendCommand(Connection.java:154)at redis.clients.jedis.BinaryClient.auth(BinaryClient.java:815)at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:145)at redis.clients.jedis.Connection.sendCommand(Connection.java:163)at redis.clients.jedis.Connection.sendCommand(Connection.java:154)at redis.clients.jedis.BinaryClient.auth(BinaryClient.java:815)at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:145)

在这里插入图片描述

读取超时

在这里插入图片描述

未知响应

在这里插入图片描述

尝试读取损坏的链接

在这里插入图片描述

读取到的数据和自己要读的无关,导致空指针、类型转换错误,数据读取错乱

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题写法

对Redis操作封装了一个Redis类
在这里插入图片描述
同事对pipeline加了这个方法
在这里插入图片描述
使用的时候

   public Map<String, AnswerModel> batchGetAnswersPipeline(List<String> answerIdList) {Map<String, AnswerModel> resultMap = new HashMap<>();try (Pipeline pipelined = redis.pipelined()) {List<Response<Map<String, String>>> responses = new ArrayList<>();for (String answerId : answerIdList) {String key = String.format(MOMENT_ANSWER_INFO, answerId);responses.add(pipelined.hgetAll(key));}pipelined.sync();for (Response<Map<String, String>> response : responses) {Map<String, String> map = response.get();AnswerModel answers = BeanUtil.mapToBean(map, AnswerModel.class);if (answers != null){resultMap.put(answers.getAnswerId(), answers);}}} catch (Exception e) {log.error("执行batchGetAnswersPipeline发生异常, redis pipeline error", e);throw new CatVillageException();}return resultMap;}

问题分析

在redis这个工具类中调pipelined时获取一个Pinelined对象,而获取这个方法里用了try with ,with了一个jedis链接,当try结束时链接会被归还jedispool连接池。而返回的这个pipeline仍然在用这个链接,当其他线程去拿链接的时候可能拿到的正好是这个链接,导致多个线程共用一个链接,一个线程在执行pipeline多条命令,另一个线程也在用这个链接。而jedis底层执行命令的时候是使用的OutputStream流式去执行命令,使用二进制流读取结果。当出现这种线程不安全问题的时候,读取写入就会有问题。

修复

删除Redis工具类中的pipelined方法,使用getJedis方法获取链接对象,再获取管道Pineline对象,自行close管道,最后执行完释放管道,链接。

public Map<String, QuestionModel> batchGetQuestionPipeline(List<String> questionIdList) {if (CollectionUtils.isEmpty(questionIdList)){return new HashMap<>();}Map<String, QuestionModel> resultMap = new HashMap<>();try (Jedis jedis = redis.getJedis()) {Pipeline pipelined = jedis.pipelined();List<Response<Map<String, String>>> responses = new ArrayList<>();for (String questionId : questionIdList) {String key = String.format(MOMENT_QUESTION_INFO, questionId);responses.add(pipelined.hgetAll(key));}pipelined.sync();for (Response<Map<String, String>> response : responses) {Map<String, String> map = response.get();QuestionModel question = convertFromMap(map);if (question != null) {resultMap.put(question.getPostId(), question);}}pipelined.close();} catch (Exception e) {log.error("执行batchGetQuestionPipeline发生异常, redis pipeline error", e);throw new CatVillageException();}return resultMap;}

注意点

若jedis在3.7版本以下的版本也会有管道二进制读取异常问题,请升级到3.7.0+版本

http://www.dtcms.com/wzjs/259389.html

相关文章:

  • 在百度上做网站多少钱最近大事件新闻
  • 惠阳住房与规划建设局网站百度号码认证申诉平台
  • 网站运营优化营销型网站有哪些
  • 团购网站建设百度推广怎么推
  • 网站怎么免费做推广方案seo工程师
  • 客户信息管理软件国内最好的seo培训
  • 淘宝客户自己做网站怎么做网络推广的基本方法有哪些
  • 溧水区住房建设局网站推广文章
  • 做问卷比较好的网站北京培训机构
  • 泉州做网站工作室seo研究中心qq群
  • 泰州免费网站建站模板公众号怎么引流推广
  • 无水印视频素材下载免费网站中国十大企业管理培训机构
  • 单页网站定义郑州做网站的专业公司
  • 阿里邮箱 网站开发网络推广员好做吗
  • 快手流量推广免费网站抖音广告投放代理商
  • 北欧做的比较好的网站制作网页的流程步骤
  • 广西seo网站推广上海搜索引擎优化seo
  • 建设工程企业资质工作网站江苏做网站的公司有哪些
  • 网站建设费用计入什么科目全球搜索大全
  • 网站建设需要做的优化工作线上推广的公司
  • vs做网站怎么添加子页网络推广策划方案
  • 公众号开发者密钥有什么用sem优化托管公司
  • 网站建设网站免费搜索引擎营销的过程
  • 北京网站备案拍照厦门seo搜索排名
  • 手机网站 cms品牌seo培训
  • 公司内部 网站开发培训机构退费法律规定
  • 网站建设哪个公司好网上销售平台有哪些
  • 如何做家教网站赚钱百度公司招聘
  • 杜桥做网站哪家好电话销售如何快速吸引客户
  • 新浪短链接生成工具网站seo关键词设置