Jedis-returnResource使用注意事项
遇到过这样一个严重问题:
发布的项目不知从什么时候开始,每月会出现一两次串号问题。串号现象指的是,用户用账号A登录系统,然后某个时间,登录账号自动变成了B。
串号出现的时间不定,测试平台难以重现,且后台检测不到错误,难以定位。当时各种排查,最后发现问题果然是出在缓存redis上,JedisPool使用有问题。
JedisPool使用注意事项:
1、每次从pool获取资源后,一定要try-finally释放,否则会出现很多莫名其妙的错误。
2、资源释放不能一致使用returnBrokenResource【项目问题就出在第二条注意事项上】。
相关代码
代码修改前大致如下:
public void closeResource(Jedis jedis) {
if (null != jedis) {
jedisPool.returnResource(jedis);
}
}
代码修改后大致如下【isOK正常设为true,捕获到异常如JedisConnectionException时传入false】:
public void closeResource(Jedis jedis, boolean isOK) {
if (null != jedis) {
if(!isOK){
LOG.error("do some things..");
jedisPool.returnBrokenResource(jedis);
}else{
jedisPool.returnResource(jedis);
}
}
}
相关源码:

分析源代码,可以知道本来应该执行returnBrokenResourceObject方法,结果却执行了returnResourceObject,并且执行returnResourceObject过程中没有报错。
具体原因应该就在方法体里面,可惜点进去并没有分析出具体是哪几行代码导致了串号的出现 = =!
不过当时项目return方面进行了修改后,错误确实没有再出现。
下面这篇文章也讲解了returnSource的相关注意事项,大家可以参考下
http://www.codeweblog.com/jedis-returnresource使用注意事项/
PS:当时项目使用的是Jedis2.7.0,不用通过图片1可以发现Jedis3.0后,returnResource就不使用了,建议用close替换。
即:jedisPool.returnResource(jedis) ---> jedis.close();
Jedis-returnResource使用注意事项的更多相关文章
- _00021 尼娜抹微笑伊拉克_谁的的最离奇的异常第二阶段 Jedis pool.returnResource(jedis)
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 博文标题:_00021 妳那伊抹微笑_谁的异常最诡异第二期之 Jedis pool.returnRes ...
- redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐
redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...
- Redis相关命令及Jedis的demo(转)
org.springframework.data.redis.core.RedisTemplate在List操作时的一个注意事项:BoundListOperations boundListOperat ...
- Redis 学习笔记3:Jedis 连接虚拟机下的Redis 服务
Jedis 是 Redis 官方首选的 Java 客户端开发包. 虚拟机的IP地址是192.168.8.88. Jedis代码是放在windows上的,启动虚拟机上的Redis服务之后,用Jedis连 ...
- Redis设置Key/value的规则定义和注意事项(附工具类)
对于redis的存储key/value键值对,经过多次踩坑之后,我们总结了一套规则:这篇文章主要讲解定义key/value键值对时的定义规则和注意事项. 前面一篇文章讲了如何定义Redis的客户端和D ...
- JedisPool使用注意事项
转自:http://www.cnblogs.com/wangxin37/p/6397783.html JedisPool使用注意事项: 1.每次从pool获取资源后,一定要try-finally释放, ...
- (转)java redis使用之利用jedis实现redis消息队列
应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象 ...
- Jedis 使用范例
public class RedisUtil { Logger logger = LoggerFactory.getLogger(RedisUtil.class); private JedisPool ...
- Java中使用Jedis操作Redis(转载)
整理 1.字符串 添加:set keyname value 查询:get keyname 拼接:append keyname value 删除:del keyname 添加多个: mset keyna ...
随机推荐
- 【WCF】错误处理(四):一刀切——IErrorHandler
前面几篇烂文中所介绍到的错误方式,都是在操作协定的实现代码中抛出 FaultException 或者带泛型参数的detail方案,有些时候,错误的处理方法比较相似,可是要每个操作协定去处理,似乎也太麻 ...
- java 基础知识八 正则表达式
java 基础知识八 正则表达式 正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待 ...
- 跟着刚哥梳理java知识点——流程控制(六)
分支结构(if…else .switch) 1.if else 语句格式 if(条件表达式){ 执行代码块; } else if(条件表达式){ 执行代码块; } else{ 执行代码块; } 2.s ...
- [Python Web]配置 nginx 遇到错误排查(初级)
配置 nginx 遇到错误排查(初级) 系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu) 本文不是一步步搭建 nginx 的过程,而是我在使用 nginx ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- windows下批量换程序——运维常用
Windows一批机器,需要批量换程序.写个脚本给大家. net stop sharedaccess (关闭防火墙) del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.vb ...
- 保证Android后台不被杀死的几种方法
由于各种原因,在开发Android应用时会提出保证自己有一个后台一直运行的需求,如何保证后台始终运行,不被系统因为内存低杀死,不被任务管理器杀死,不被软件管家等软件杀死等等还是一个比较困难的问题.网上 ...
- 蓝桥杯-有奖猜谜-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 关于cisco ccp 或sdm管理gns3中思科路由器的成功分享
本来工作环境中有一台c1841,闲来无事,升级了最新的IOS=c1841-adventerprisek9-mz.151-4.M6.bin,在xp虚拟机中安装sdm(新windows系统不支持)和在wi ...
- redis的安装部署启动停止<17.3.21已更新>
--------------------------------------------------------- 启动redis时使用下面两条命令: redis-server /etc/redis. ...