解决Spring Boot中使用Jedis连接Redis异常:JedisDataException: ERR Client sent AUTH, but no password is set

问题描述

在Spring Boot项目中使用Jedis客户端连接Redis时,出现如下异常: 

Exception in thread "main" org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:281)
	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.getConnection(JedisConnectionFactory.java:475)
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:132)
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:95)
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:82)
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215)
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188)
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96)
	at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:236)
	at cn.zyt.springbootlearning.config.RedisConfiguration.main(RedisConfiguration.java:59)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
	at redis.clients.jedis.util.Pool.getResource(Pool.java:59)
	at redis.clients.jedis.JedisPool.getResource(JedisPool.java:234)
	at redis.clients.jedis.JedisPool.getResource(JedisPool.java:15)
	at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:271)
	... 9 more
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
	at redis.clients.jedis.Protocol.processError(Protocol.java:132)
	at redis.clients.jedis.Protocol.process(Protocol.java:166)
	at redis.clients.jedis.Protocol.read(Protocol.java:220)
	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:318)
	at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:236)
	at redis.clients.jedis.BinaryJedis.auth(BinaryJedis.java:2229)
	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:119)
	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:424)
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:349)
	at redis.clients.jedis.util.Pool.getResource(Pool.java:50)
	... 12 more

解决方法

该问题的出现是由于Redis中本身没有设置密码,但连接时指定了密码则会带Auth,这就造成了如上的异常。最简单的解决方法:将连接时设置的密码删掉后,重新尝试异常即解决。

此外如果需要使用Redis的签名认证,可以使用如下两种方式设置Redis中密码:

1. 在指定配置文件启动时:

yitian@heron01:/usr/local/bin$ redis-server /etc/redis/redis.conf

在配置文件中进行如下设置,既可以指定Redis的密码(将下面foobared改为你需要设置的密码),此时在Jedis连接Redis时需要指定密码。

2. 使用命令行设置Redis密码,此时并不会改变配置文件中的设置,但也可以使密码的设置生效。设置后,客户端重新连接server则需要密码。

config set requirepass 123456

查看密码设置的情况:

config get requirepass

带密码命令行登录Server: 

redis-cli -p 6379 -a 123456

注意,上述指定redis.conf配置文件启动的方式可以使配置文件中的密码生效,而默认redis-server不带配置文件(或配置文件为默认状态时),是没有设置密码的,所以命令行cli连接无需验证,而Jedis登录也不需要带password。

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool是一个Redis连接异常的错误信息。这个错误通常发生在使用Jedis连接池时,当无法从连接获取可用的连接资源时会抛出此异常。这可能有多种原因,比如连接池已满、网络问题或者Redis服务器出现故障等。 要解决这个问题,可以尝试以下几个步骤: 1. 检查连接池配置:确认连接池的最大连接数是否足够大,以及最大空闲连接数和最小空闲连接数的设置是否合理。可以适当增加连接池的大小,确保能够满足并发访问的需求。 2. 检查网络连接:确保网络连接正常,可以尝试使用ping命令来测试与Redis服务器的连接。 3. 检查Redis服务器状态:确认Redis服务器是否正常运行,可以通过telnet命令或者使用Redis客户端连接工具来测试连接是否成功。 4. 检查资源释放:在使用Jedis连接后,需要手动将连接对象归还给连接池,确保资源可以被正确释放。可以使用try-with-resources语句块或者手动调用close()方法来关闭连接。 通过检查连接池配置、网络连接Redis服务器状态和资源释放等方面,可以解决redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool](https://blog.csdn.net/weixin_44096133/article/details/125232997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详细解决redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the ...](https://blog.csdn.net/lvoelife/article/details/129622794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值