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

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

 

导语

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

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

 

一、解决思路

首先查看Google chrome的后台

 

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第1张图片

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

 

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第2张图片

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第3张图片

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

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

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第4张图片

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第5张图片

 

二、解决步骤

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

 

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第6张图片

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第7张图片

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第8张图片

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

关于错误redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply的一种解析。_第9张图片

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

三、总结

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

你可能感兴趣的:(java)