jedis returnResource(jedis)问题

本文探讨了在高并发场景下使用JedisPool管理Redis连接时遇到的问题,包括类转换异常与超时等问题,并提供了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



  一坑未平,一坑又起,今天遇见了新的问题:jedisPool 的问题

        问题描述:分布式服务采用redis作为分布式锁实现,由于系统用java,所以就是用了jedis来实现redis链接对象,其中采用了jedispool作为连接池管理链接,

上线之后,前20分钟通过监控观察一切正常,通过内存所管理界面也可以正常观察锁的信息,但当上游系统开始高并发大批量进行服务调用之后,redis开始出现异常,

 大致为: classCastException:[B cann't cast long ........................    timeout等信息,,服务不得不回滚。


        通过对问题代码分析,可能是由于多线程在从redispool 里获取jedis资源的时候,由于获取的链接可能发生了异常,导致这个链接在returnResource时,没有被正确的回收,导致资源被耗尽,出现timeout的问题,同时,由于出现问题的链接,回收时,资源没有别初始化完全,导致在多线程的情况下,在同一个链接中(jedis对象)发生了数据共享的问题,这也就导致了出现类转换异常这样的错误。


      解决办法: 通过对returnResoure代码的分析发现,还有一个方法是专门处理这种链接情况的returnBrokeResoure,这两个方法要同时对jedis实例进行捕获异常情况与回收资源,当然也可以使用 close 来回收jedis资源。   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值