关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的解析。

 

导语

在做一个redis小项目时,发现了一个小问题,在页面多次刷新后,点赞数和浏览量(这两个都是用redis存储的)拿不到值。

而第一次访问可以正常显示,多次刷新也可以显示,但经过大约十次左右的刷新后,拿不到值。

 

一、解决思路

首先查看Google chrome的后台

 

这里的报错信息为500,是一个ajax向后台发送的post请求。点开NetWork页,重新刷新,查看发送的请求返回的response.

看到了报错信息。(也可以从eclipse或其他工具的控制台查看报错信息,我更倾向于在浏览器查看,浏览器查看更加的直观,能让我专心地解决当前问题)

 

从报错信息,定位到自己写的代码出错的地方,这里报错信息提示为“不明请求”

在获取键的值时出错。这个时候我不禁陷入思考,为什么会这样?

我打开redis的日志查看,发现其中的最后一段写着0 clients connected (0 slaves), 1202272 bytes in use(没有用户机连接),这肯定不对啊,前面的日志明摆着写了有一个客户机连接的。

我想到前几天老师上课的时候也有类似的问题,老师在tomcat服务器里面的代码在eclipse里面修改后,一直没有更新,即使清理缓存也没用,老师调试的时候发现是连接MySQL数据库的JDBCHelper里面方法的流没关(但根本原因不在这)。我想,是不是连接redis的流没关的问题。

 

二、解决步骤

首先,我在每个调用redis的方法里面写了close()方法。

 

这样做,在第二次的刷新时,会出现如下问题,并没有实际的解决问题。因为这个类里面的方法调用的都是同一个Jedis对象的实例,在第一次访问里面的方法关了jedis后,其他的方法调用不到。

由此,我发现我的实例化Jedis对象是在类里面作为一个属性声明的。

解决方法是:哪个方法需要就在哪个方法里面实例化调用并关闭。

关键的解决代码就这两行,错误解决

三、总结

这个错误折射出很多东西,在平常开发过程中,我不习惯在调用一个含有输入输出流的对象关闭流,留下了许多的bug。因为平常开发在本机,访问量太少,这种bug不到上线的时候是看不出来的。多留心啊!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值