前段时间写了些redis相关的代码
谁料最近一直出问题,错误是jedis添加数据的时候返回类型Arriylist不能转换为Long型
但仔细看了下,sadd方法返回类型的确是Long型,什么时候变成list了
网上找了下,同样有网友遇到相同问题,说是连接超时造成的,不知道是不是这样导致的,但我的代码的确有超时异常
调用时候cath下异常,调用连接池returnBrokenResource方法 如下:
- Jedis jedis = getJedispool().getResource();
- try {
- jedis.keys("*");
- } catch (Exception e) {
- e.printStackTrace();
- jedisPool.returnBrokenResource(jedis);
- System.out.println("return already");
- }
Jedis jedis = getJedispool().getResource(); try { jedis.keys("*"); } catch (Exception e) { e.printStackTrace(); jedisPool.returnBrokenResource(jedis); System.out.println("return already"); }
发现卡到returnbrokenresource那块不往下走了,然后找到源码
JedisPool.java
- public void destroyObject(final Object obj) throws Exception {
- if (obj instanceof Jedis) {
- final Jedis jedis = (Jedis) obj;
- if (jedis.isConnected()) {
- try {
- try {
- jedis.quit();
- } catch (Exception e) {
- }
- jedis.disconnect();
- } catch (Exception e) {
- }
- }
- }
- }
public void destroyObject(final Object obj) throws Exception { if (obj instanceof Jedis) { final Jedis jedis = (Jedis) obj; if (jedis.isConnected()) { try { try { jedis.quit(); } catch (Exception e) { } jedis.disconnect(); } catch (Exception e) { } } } }
停到jedis.quit() 这行不走了,再往里
- protected String getStatusCodeReply() {
- flush();
- pipelinedCommands--;
- final byte[] resp = (byte[]) protocol.read(inputStream);
- if (null == resp) {
- return null;
- } else {
- return SafeEncoder.encode(resp);
- }
- }
protected String getStatusCodeReply() { flush(); pipelinedCommands--; final byte[] resp = (byte[]) protocol.read(inputStream); if (null == resp) { return null; } else { return SafeEncoder.encode(resp); } }
卡到 final byte[] resp = (byte[]) protocol.read(inputStream)这行
本人能力有限,真跟不下去了
quit()走不下去,那我就直接往下走
改了代码,注掉jedis.quit(),直接走jedis.disconnect()
ok了,这个连接终于给正常返回连接池了
之后连接池连接数设为1,再次让它超时,不调用自带的returnBrokenResource
- jedis jedis = getJedispool().getResource();
- try {
- jedis.keys("*");
- } catch (Exception e) {
- e.printStackTrace();
- jedis.disconnect();
- System.out.println("return already");
- }
- jedisPool.returnResource(jedis);
- System.out.println(jedis.ping());
jedis jedis = getJedispool().getResource(); try { jedis.keys("*"); } catch (Exception e) { e.printStackTrace(); jedis.disconnect(); System.out.println("return already"); } jedisPool.returnResource(jedis); System.out.println(jedis.ping());
输出PONG
终于编辑完了
相关推荐
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
redis客户端连接工具 redis客户端连接工具 redis客户端连接工具
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面...
RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。
一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载相关源码 这里对其进行一个简单封转 包括key valye set list hashset的封装
redis客户端连接工具,RedisDesktopManager方便连接redis处理和查看数据
日常使用linux版连接redis客户端Another-Redis-Desktop-Manager.1.3.9
windows环境 redis服务免安装 附带redis客户端 redis-desktop-manager-0.8.8.384
Redis Java客户端Jedis 2.9.0 jar+commons-pool2-2.4.2
jedis-2.9.0.jar jedis-2.9.0-javadoc.jar jedis-2.9.0-sources.jar
使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar
win上的redis客户端, 方便在win上查看redis的数据......
Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...
RedisClient 是 Redis 客户端 GUI 工具,使用 Java swt 和jedis 编写。它将redis数据以windows资源管理器的界面风格呈现给用户,可以帮助redis开发人员和维护人员方便的建立,修改,删除,查询redis数据,可以将数据...
redis客户端管理工具,redis客户端管理工具,redis客户端管理工具
Redis客户端程序-WindowsX64
Jedis 是 Redis 官方首选的 Java 客户端开发包。此包包含最新的版本截止2018-06-10,版本2.9.0,并且包含依赖的JAR包,仅需导入即可使用。
博客文章示例代码:spring boot 自学笔记(四) Redis集成—Jedis
redis客户端redis-desktop-manager mac版 redis-desktop-manager-0.8.3-2550.dmg