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

重庆官方推广网站/cps推广联盟

重庆官方推广网站,cps推广联盟,学习php网站开发怎么样,手机wordpress加载图片慢java原生程序redis连接(连接池/长连接和短连接)选择问题发布时间:2019-01-15 21:35,浏览次数:508, 标签:javaredis最近遇到的连接问题我准备从重构的几个程序(redis和mysql)长连接和短连接,以及连接池和单连接等问题用几篇博客来总…

java原生程序redis连接(连接池/长连接和短连接)选择问题

发布时间:2019-01-15 21:35,

浏览次数:508

, 标签:

java

redis

最近遇到的连接问题我准备从重构的几个程序(redis和mysql)长连接和短连接,以及连接池和单连接等问题用几篇博客来总结下。

这个问题的具体发生在java原生程序和redis的交互中。这个问题对我最深刻的教训就是说明获取连接不能迷信连接池和原封不动的搬运以前代码的utils。在连接的建立的一开始就应该思考连接的稳定性和是否应该关闭连接。否则这些问题在线上运行十几个小时可能才会暴露,即使知道了问题反过来的排查和修改也会很困难。甚至在重构之前用一种勉强凑合的方式掩盖问题(给自己挖坑)

应用场景

java原生程序,内部写多个线程,定时循环监测(一小时一次),使用了redis连接。

最开始是采用长连接的方式,在main方法中用连接池获取连接后分配到各线程,这种方式虽然只创建一次连接,但在长时间的程序休眠中,仍然会产生对连接的占用,也会导致掉连接的问题,以下是从连接池获取连接的代码(也可拆分成获取连接池和通过连接池单独获取连接):

public Jedis createJedisCluterInstance(Map props){   String[]

hostPortStr =

String.valueOf(this.config.getOrDefault(REDIS_CLUSTER_NODE_PORT,props.get(REDIS_CLUSTER_NODE_PORT))).split(":");

GenericObjectPoolConfig config = new GenericObjectPoolConfig();

config.setMaxTotal(Integer.valueOf(String.valueOf(this.config.getOrDefault(REDIS_MAX_TOTAL,props.get(REDIS_MAX_TOTAL)))));

config.setMaxIdle(Integer.valueOf(String.valueOf(this.config.getOrDefault(REDIS_MAX_IDLE,props.get(REDIS_MAX_IDLE)))));

config.setMaxWaitMillis(Integer.valueOf(String.valueOf(this.config.getOrDefault(REDIS_MAX_WAIT_MILLIS,props.get(REDIS_MAX_WAIT_MILLIS)))));

​   JedisPool jedisPool = new

JedisPool(config,hostPortStr[0],Integer.valueOf(hostPortStr[1])); ​   final

Jedis[] jedis= {null}; ​   Retryer retryer =

RetryerBuilder.newBuilder()           .retryIfException()

.withWaitStrategy(WaitStrategies.fixedWait(1000, TimeUnit.MILLISECONDS))

.withStopStrategy(StopStrategies.stopAfterAttempt(10))           .build();

try {       retryer.call(() -> {           jedis[0] =

jedisPool.getResource();           jedis[0].auth("123");           String value

= jedis[0].ping();           return StringUtils.isNotBlank(value);       });

} catch (Exception e) {       LOGGER.error("多次获取Redis连接失败!");   }   return

jedis[0]; }

当时处理掉连接的方式是采用了定时任务按每分钟一次的频率监测,对异常trycatch后直接退出程序。

这种方法产生了很大的资源消耗,也对业务造成影响,主要原因是盲目使用连接池造成的。

修改后采用传入配置到线程中,在线程中启动连接,同时修改连接池连接为直接获取连接。减少了资源消耗,同时也处理了掉连接的问题。并在每次循环结束后关闭redis连接

:关闭方法redis.close();  并在下次循环开始后重新初始化,直接获取redis对象代码:

public Jedis getJedis(Map props){   String[] hostPortStr =

String.valueOf(this.config.getOrDefault(REDIS_CLUSTER_NODE_PORT,

props.get(REDIS_CLUSTER_NODE_PORT))).split(":");   Jedis jedis = new

Jedis(hostPortStr[0],Integer.valueOf(hostPortStr[1]),Integer.valueOf(String.valueOf(this.config.getOrDefault(REDIS_MAX_WAIT_MILLIS,

props.get(REDIS_MAX_WAIT_MILLIS)))));   jedis.auth("123");   return jedis; }

http://www.lbrq.cn/news/735805.html

相关文章:

  • 个人建站模板/广告投放平台都有哪些
  • 找事做搜索网站/北京网站推广助理
  • 怎样成立一个网站/市场营销推广
  • 教育门户网站系统建设方案/seoer是什么意思
  • 太湖手机网站建设/色盲测试图
  • 政府门户网站html模板/如何制作app软件
  • 滨州j建设局网站投诉电话/友の 连接
  • 网站建设人员的工资分配/最新网络推广平台
  • 网站建设 网站开发/新航道培训机构怎么样
  • 制作网站价格不一/网站分析案例
  • 做网站还要什么认证吗/百度保障客服电话
  • 无忧网站建设报价/游戏推广赚佣金的平台
  • 哪个公司需要做网站/宁波网站推广专业服务
  • 珠海建设网站的公司简介/百度排名点击软件
  • 动易cms下载/杭州网站优化推荐
  • 网站设计注意事项/seo教程搜索引擎优化入门与进阶
  • 江西省住房城乡建设厅网站/百度seo服务公司
  • 房屋中介做网站的/seo搜索引擎优化招聘
  • 个人备案 可以做企业网站吗/百度关键词优化推广
  • wordpress设置多语言/优化seo排名
  • 西安微网站建设/要做网络推广
  • 房产网站案例/2022最新永久地域网名
  • 自助建站免费信息发布网站/上海网站推广服务
  • 网站建设预算/免费p站推广网站入口
  • 华大集团 做网站/软件推广赚钱
  • 安徽炒股配资网站开发/百度广告开户流程
  • wordpress修改时区/长沙网站优化对策
  • wps2016怎么做网站/百度推广seo怎么学
  • app和网站的区别是什么/免费友链平台
  • 长沙做官方网站/站长工具seo下载
  • Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具
  • Design Compiler:逻辑库名与逻辑库文件名及其指定方式
  • 读《精益数据分析》:精益画布——创业与产品创新的高效工具
  • QT-初识
  • AI重塑软件测试:质量保障的下一站
  • IDM 下载失败排查全攻略