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

vs做网站如何输出seo工作内容

vs做网站如何输出,seo工作内容,珠海网站建设策划方案,装修平台加盟文章目录 问题现象栈溢出(不断的重连)读取超时未知响应尝试读取损坏的链接读取到的数据和自己要读的无关,导致空指针、类型转换错误,数据读取错乱 问题写法问题分析修复注意点 问题现象 栈溢出(不断的重连&#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/146320.html

相关文章:

  • 餐饮企业网站建设方案书北京首页关键词优化
  • 做网站需要什么设备东莞网站推广排名
  • 自己做视频网站的流程搜索关键词
  • 网站开发 合同百度搜索引擎入口官网
  • 研发一款app要多少钱企业网站seo推广
  • 智慧团建网站登录密码互联网推广平台有哪些公司
  • 政府网站建设 报价网站ip查询
  • wordpress获取页面正文谷歌seo服务
  • 郑州淘宝网站建设百度售后服务电话
  • 北京网站建设 seo公司哪家好网络推广服务商
  • 沧州市东光建设局 网站发帖平台
  • 静态网站可以做哪些内容网络营销专业学校排名
  • 百度搜索网站打开错误软文推广文章
  • 昆明网站建设哪家google seo实战教程
  • 为什么大家用wordpress建网站营销案例
  • 上海营销网站建设公司外贸营销网站
  • 自己做传奇网站怎么在百度上做推广
  • 网络设计一个月多少钱黑锋网seo
  • 澄迈网站建设成都关键词优化服务
  • 网站充值功能怎么做一诺网络推广公司
  • 369网站建设会计培训班哪个机构比较好
  • 网站标题字数推广竞价托管公司
  • 网站备案网站简介扬中网站制作
  • wordpress文章页添加摘要seo关键词排名优化方法
  • 动态网站如何做登录界面火蝠电商代运营公司
  • 制作网站链接谷歌推广代理公司
  • web应用开发要学什么太原seo全网营销
  • 河北邢台有什么好玩的地方秦洁婷seo博客
  • 工作室装修效果图百度搜索优化关键词排名
  • 张家港电脑网站制作吸引人的软文