问题描述:
双十一本来是单身人事的狂欢party,却被网络购物抢去了热点。我们公司是互联网教育类型公司,主要销售培训课程,成交量在互联网教育线上交易可以达到前三名。大家都在万众瞩目的期待着用户量的下单,凌晨12点之后,用户量暴增,此时尴尬问题出现了,出现了一个技术故障,用户无法下单,当时老大火冒三丈!经过查找发现redis报Could not get a resource from the pool,资源一直不释放,并且集群中的单台redis连接量很高,技术都慌了,大家开始定位问题所在,因为购物车和促销优惠服务都用到redis。
解决问题:
最开始以为是redis集群负载高或者是项目服务连接redis的配置参数导致,各种更改最大连接数、连接等待数,虽然报错信息频率有所缓解但是还是持续报错。
后来经过线下测试,发现促销活动,存放redis中的字符很大,平均1s返回数据,并且redis中的key是一个常量值,hash命中集群机器的时候,只有其中一台连接数很高。“Could not get a resource from the pool”这个错误已经深深的印在脑海里。
临时处理办法,情况万分紧急,因为这个数据活动期间不会变更活动策略,把redis数据第一次放入static全局变量中,修改上线问题解决!
报Could not get a resource from the pool错误原因有很多,配置错误或者客户端连接工具报错不释放连接都会引起,请跟进具体情况分析问题。希望对大家有用,切记redis是缓存工具,使用时应该利用快速响应,存储简单数据,不遵循这个逻辑很容易出现问题。