JedisConnectionException: Could not get a resource from the pool

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
相关文章
|
5月前
|
NoSQL Java Redis
Could not get a resource from the pool 异常定位和解决
Could not get a resource from the pool 异常定位和解决
123 4
Failed to load resource:9090/searchvideolist?mysearch%E8%B0%B7%E6%AD%8C:1
Failed to load resource:9090/searchvideolist?mysearch%E8%B0%B7%E6%AD%8C:1
|
6月前
|
存储
Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index r【已解决】
Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index r【已解决】
160 1
|
NoSQL Redis
Could not get a resource from the pool
Could not get a resource from the pool
125 0
|
索引
ES报错:“type“=>“cluster_block_exception“, “reason“=>“blocked by: [FORBIDDEN/12/index read-only / allow
ES报错:“type“=>“cluster_block_exception“, “reason“=>“blocked by: [FORBIDDEN/12/index read-only / allow
380 0
ES报错:“type“=>“cluster_block_exception“, “reason“=>“blocked by: [FORBIDDEN/12/index read-only / allow
|
NoSQL Java Linux
Jedis异常Could not get a resource from the pool
Jedis异常Could not get a resource from the pool
732 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/
457 0
|
数据库
This scheduler instance is still active but was recovered by another instance in the cluster
This scheduler instance is still active but was recovered by another instance in the cluster
911 0
|
存储 编译器 C++
Q_INIT_RESOURCE
Q_INIT_RESOURCE
309 0
|
Oracle 关系型数据库 数据库
Resource Manager
什么是Resource ManagerOracle Database Resource Manager(RM)是Oracle用于管理负载冲突而设计的工具。RM在10g版本中已经诞生,但不完善,有很多Bug。
1047 0