为什么80%的码农都做不了架构师?>>>   

BEFORE: 之前使用的单实例的JedisPool没有这个问题;JedisPool的connected_clients 一般不会超过80; AFTER: 扩展后6个实例,每个实例可以达到10K,从80徒增到60w;

STEP 0. Jedis使用的是apache common-pool 的 BasePoolableObjectFactory管理对象。 public interface PooledObjectFactory<T> { PooledObject<T> makeObject(); void activateObject(PooledObject<T> obj); void passivateObject(PooledObject<T> obj); boolean validateObject(PooledObject<T> obj); void destroyObject(PooledObject<T> obj); }

STEP 1. 代码跟踪的时候,发现一直不断的创建对象,没有使用池中的对象;Redis 服务器接收到很多PING;connected_clients没有降低;

**STEP 2.**发现进入destroyObject后,没有处理过jedis.disconnect(),定位 (obj instanceof ShardedJedis) == false。

public void destroyObject(final Object obj) throws Exception {if ((obj != null) && (obj instanceof ShardedJedis)) {ShardedJedis shardedJedis = (ShardedJedis) obj;for (Jedis jedis : shardedJedis.getAllShards()) {try {try {jedis.quit();} catch (Exception e) {}jedis.disconnect();} catch (Exception e) {}}}
}

STEP 3. redis.clients.util.Pool中的 public void returnResourceObject(final Object resource){}//为什么是Object,不使用泛型~~~

总结: ShardedJedis在使用完后要将整个ShardedJedis对象放回池中。

but:发布前在本地压测10个线程,每个线程循环10000次,居然没有压出异常,还是不够仔细!

转载于:https://my.oschina.net/xdhua/blog/221086

ShardedJedis 错误使用相关推荐

  1. jedis 用连接池时超时返回值类型错误

    2019独角兽企业重金招聘Python工程师标准>>>      这个是今天发现一个bug:在测试redis并发读写的时候(jedis作为客户端,并使用了连接池),总是报 java. ...

  2. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  3. Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决

    在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决

  4. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  5. java通过异常处理错误,java基础之通过错误处理异常

    我们在编程过程中,通常需要时刻关注可能遇到的问题,此时可以把问题分为两类:普通问题与异常问题.普通问题:我们可以通过从当前环境中获取到的信息来解决这个问题:而异常问题:在当前环境中获取到的信息并不能解 ...

  6. php错误提示如何查询,php-如何显示我的MySQLi查询错误?

    这个问题已经在这里有了答案: mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误. 如何获取并修复实际的mysql错误? 1个答案 mysqli还是死了,它必须 ...

  7. linux mysql 主从 1130_Linux Mysql 1130错误解决

    Linux Mysql 1130错误解决 今天在win32下通过navicat 远程登录Mysql时出现如下错误: 想都不用想,肯定是Mysql的访问权限问题. 首先,通过终端(我用的是SSH)远程登 ...

  8. 错误提示没了_ESC错误排查-系统启动篇

    # ECS从入门到精通(错误排查) # Linux启动与登录问题 Linux 启动与登录问题是 ECS 的高频问题,而往往处理不及时会直接影响到 用户业务的正常可持续运行,因此也变成了我们处理问题优先 ...

  9. Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)

    RESP 是 Redis 序列化协议Redis Serialization Protocol 的简写.它是一种直观的文本协议,优势在于实现异常简单,解析性能极好. ​ Redis 协议将传输的结构数据 ...

最新文章

  1. php 的opcode缓存apc以及其安装
  2. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
  3. 关于STM32与SD卡通信的一些思考与总结
  4. iOS_“图片浏览选择”功能的编写思路
  5. flutter text 左对齐_flutter输入框TextField中文本textAlign对齐分析篇
  6. boost::geometry::model::d2::point_xy用法的测试程序
  7. Python 第十一章 常用第三方模块
  8. TensorFlow学习笔记(十三)TensorFLow 常用Optimizer 总结
  9. windows删除「WIN+R」的历史记录
  10. day4:单用户及救援模式及互相登录
  11. 深延科技:基于深度学习的智能OCR识别技术大有可为
  12. 加快二代支付系统建设
  13. 技能get!如何使用PDF查找关键字
  14. handsontable+vue+ 自定义多选
  15. 关于Vue使用es6模板字符串没反应的问题
  16. spring retry, guava retrying 的整合-sisyphus java 重试
  17. windows合成pfx
  18. 天下所有的事,都是为了利益,都是按利益逻辑规律在运行,发生的一切事情都可以用利益逻辑来解释
  19. oracle原销售订单退货,取消销售订单
  20. Android仿支付宝咻一咻动画

热门文章

  1. 07/11/13 资料整理
  2. Java中的多线程你只要看这一篇就够了
  3. python基础-模块导入
  4. Colocation Guard公司再增1万平方英尺的数据中心空间
  5. 浏览器端JS导出EXCEL
  6. iOS Swift编程语言
  7. c++返回值 注意事项
  8. silverlight RadGridView总结二(转载)
  9. CSS3 Animation(下)
  10. 为什么要学习DOS?