JedisConnectionException: Could not get a resource from the pool

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: JedisConnectionException: Could not get a resource from the pool

版本声明

在这里插入图片描述

问题介绍

将配置了redis连接池的项目部署到服务器上构建docker镜像后启动容器,发现使用redis时一直报如下错误.
部分日志如下:

2020-03-17 08:56:47.345 [http-nio-6008-exec-1] ERROR c.z.e.common.handler.ResponseExceptionHandler - redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    redis.clients.util.Pool.getResource(Pool.java:53)
    redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
    com.zhaolaobao.ebankpay.common.redis.service.impl.RedisServiceImpl.domain(RedisServiceImpl.java:100)
    com.zhaolaobao.ebankpay.common.redis.service.impl.RedisServiceImpl.getString(RedisServiceImpl.java:55)
    com.zhaolaobao.ebankpay.qrpay.service.impl.QrPayServiceImpl.getQrPay(QrPayServiceImpl.java:89)

在这里插入图片描述
但是本地启动项目、打jar包本地java -jar运行、服务器上java -jar运行,都没问题

项目jedisPool配置

在这里插入图片描述

源码 debug

查看一下位置(根据自己的配置类得到源码位置):
org.apache.commons.pool2.impl.GenericObjectPool#GenericObjectPool(org.apache.commons.pool2.PooledObjectFactory, org.apache.commons.pool2.impl.GenericObjectPoolConfig)
在这里插入图片描述
配置好远程debug后,在服务器启动项目时,也启动本地的remote连接,等待redis配置初始化,进入此断点时,查看factory:
在这里插入图片描述
此时可以排查自己的 hostAndPort 与 password 是否正确;

原因以及解决方案

密码后面的 “$q”丢了? 密码居然变了???

排查后发现,redis密码中有个“&”的特殊符号!!!
博主本想是通过docker-compose.yml配置环境变量注入的,后来才发现密码中的这个 $ 会导致从docker-compose.yml中取值时发送这样的问题;

那么docker-compose.yml中是否可以使用 ‘\$’ 来解决此问题呢?在这里插入图片描述
然而 $符号以及后面的还是没了。

最后:
1、此密码还是老老实实的写在项目里把,不能通过环境变量注入了!!成功解决
2、或者修改密码后(不要带有‘$’ 这种特殊符号了),成解决

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
21天前
|
Java 应用服务中间件
完美解决tomcat启动异常:Invalid byte tag in constant pool: 19;Unable to process Jar entry [module-info.class]
完美解决tomcat启动异常:Invalid byte tag in constant pool: 19;Unable to process Jar entry [module-info.class]
583 0
|
12月前
|
NoSQL Redis
Could not get a resource from the pool
Could not get a resource from the pool
92 0
|
Java Spring
@Resource的使用
@Resource的使用
|
NoSQL Java Linux
Jedis异常Could not get a resource from the pool
Jedis异常Could not get a resource from the pool
555 0
|
Android开发
Could not get resource ‘https://dl.google.com/dl/android/maven2/com/android/
Could not get resource ‘https://dl.google.com/dl/android/maven2/com/android/
305 0
|
存储 编译器 C++
Q_INIT_RESOURCE
Q_INIT_RESOURCE
266 0