使用Jedis操作Redis时是否需要调用jedis.close()?
关于Jedis客户端连接是否需要手动关闭的疑问
我是Java开发新手,目前使用Jedis作为Redis Java客户端库,在方法内部创建Jedis对象并调用其API获取Redis的服务器、内存、客户端及统计信息。我的疑问是:由于Jedis对象是在方法内创建的,它会自动销毁吗?是否需要调用jedis.close()来关闭客户端连接?如果需要,原因是什么?
相关代码如下:
class Information{ public void redisdetails(){ Jedis jedis = new Jedis("localhost", 6379); Map<String, Object> info = new HashMap<>(); info.put("server", jedis.info("server")); info.put("memory", jedis.info("memory")); info.put("clients", jedis.info("clients")); info.put("stats", jedis.info("stats")); } }
嗨,作为经常用Jedis做Redis开发的人,我来给你把这个问题讲明白:
1. 划重点:Jedis对象不会自动关闭连接,必须手动处理
首先要明确:Jedis对象在方法执行完毕后会被Java垃圾回收机制回收,但它持有的Redis TCP连接不会自动关闭。Redis服务器能承载的客户端连接数是有限的,如果大量连接只创建不关闭,很快就会耗尽Redis的连接资源,导致新请求无法建立连接,甚至触发maxclients限制的报错。
2. 为什么一定要调用jedis.close()?
- 连接是稀缺资源:Redis默认允许的并发连接数大概是10000左右(可配置),如果不主动关闭连接,这些空闲连接会一直占用资源,直到Redis主动超时断开(默认超时300秒),这段时间里的资源完全是浪费的。
- 底层实现逻辑:Jedis是基于Socket和Redis建立TCP连接的,Socket连接不会随着Jedis对象被GC而自动释放,必须主动调用
close()方法来关闭Socket,同时通知Redis服务器回收该连接。
3. 正确的代码写法:优先用try-with-resources
Java 7及以上推荐用try-with-resources语法,它会自动帮你关闭资源,不用手动写close(),就算代码抛出异常也能保证连接被关闭,安全又简洁:
class Information{ public void redisdetails(){ // try-with-resources会自动关闭Jedis对象 try (Jedis jedis = new Jedis("localhost", 6379)) { Map<String, Object> info = new HashMap<>(); info.put("server", jedis.info("server")); info.put("memory", jedis.info("memory")); info.put("clients", jedis.info("clients")); info.put("stats", jedis.info("stats")); } } }
如果你的项目还在用Java 6及以下,那一定要在finally块里手动调用close(),避免异常导致连接泄漏:
class Information{ public void redisdetails(){ Jedis jedis = null; try { jedis = new Jedis("localhost", 6379); Map<String, Object> info = new HashMap<>(); info.put("server", jedis.info("server")); info.put("memory", jedis.info("memory")); info.put("clients", jedis.info("clients")); info.put("stats", jedis.info("stats")); } finally { if (jedis != null) { jedis.close(); } } } }
额外建议:生产环境用连接池更靠谱
其实在实际生产中,我们很少直接创建单个Jedis对象,而是用JedisPool(连接池)来管理连接。连接池可以复用连接,避免频繁创建销毁连接的性能开销,还能统一控制连接数量。不过不管是单个Jedis还是连接池,用完后都要正确释放/归还连接哦。
内容的提问来源于stack exchange,提问作者Rohit Pathak
相关产品推荐
相关产品推荐

