ERR 客户端发送了 AUTH,但未设置密码

ERR Client sent AUTH, but no password is set

我正在使用 jedis 2.8.0 并遇到以下异常:

Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
        at redis.clients.jedis.Protocol.processError(Protocol.java:123)
        at redis.clients.jedis.Protocol.process(Protocol.java:157)
        at redis.clients.jedis.Protocol.read(Protocol.java:211)
        at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:297)
        at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:196)
        at redis.clients.jedis.BinaryJedis.auth(BinaryJedis.java:2049)
        at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:89)
        at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:458)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
        at redis.clients.util.Pool.getResource(Pool.java:49)
        ... 4 more

以下是我正在使用的api:

jedisPool = new JedisPool(jedisPoolConfig, host, port, IDLE_CONNECTION_TIMEOUT, authSecret); 

备注:

  1. 我能够使用确切的方式成功地向 redis 发送命令 使用 redis-cli -a 选项的相同密码。
  2. 我也在日志里打印了密码,看看是不是发错了 密码,但传递给 JedisPool 的密码是正确的。
  3. 我也尝试 "redis-cli monitor" 调用 redis 但我没有看到任何 AUTH 请求。

您的 Redis 实例中没有设置密码。使用 redis-cli -a 发送的密码将被忽略。

现在,您可以在redis实例中设置密码了。为此,编辑 redis 配置文件,设置 requirepass 选项并重启 redis 实例。

或者,在与redis通信时忽略密码选项。例如

jedisPool = new JedisPool(jedisPoolConfig, host, port, IDLE_CONNECTION_TIMEOUT);

如果您不想设置密码,这可能会奏效。

spring.redis.host=127.0.0.1 
spring.redis.port=6379 
spring.redis.password=

将密码字段留空。

使用要求传递密码选项

redis 127.0.0.1:6379> 授权密码

(错误)ERR 客户端发送了 AUTH,但未设置密码。

redis 127.0.0.1:6379> CONFIG SET requirepass "mypass"

OK

redis 127.0.0.1:6379> AUTH mypass

OK