./src/main/java/redis/clients/jedis/Jedis.java:341
Код: Выделить всё
public int getDB() {
return this.db;
}
С другой стороны, clientInfo() фактически возвращает информацию о соединении со стороны сервера, т.е. то, что возвращает команда Redis INFO:
./src/main/java/redis/clients/jedis/Jedis.java:8658
Код: Выделить всё
@Override
public String clientInfo() {
checkIsInMultiOrPipeline();
connection.sendCommand(CLIENT, Keyword.INFO);
return connection.getBulkReply();
}
Код: Выделить всё
redis://redis1:6379/1Код: Выделить всё
val poolConfig = new JedisPoolConfig()
poolConfig.setTestWhileIdle(true)
poolConfig.setMinEvictableIdleDuration(java.time.Duration.ofSeconds(60))
poolConfig.setTimeBetweenEvictionRuns(java.time.Duration.ofSeconds(30))
poolConfig.setNumTestsPerEvictionRun(-1)
poolConfig.setMaxTotal(32)
val jPool = new JedisPool(poolConfig, new java.net.URI("redis://redis1:6379/1"), 0, 0)
Но в дальнейшем довольно часто случается, что заимствованный экземпляр Jedis подключается к базе данных 0.
Итак, когда мы сравниваем getDB() и clientInfo(), например в следующем коде:
Код: Выделить всё
val rTopic: Jedis = jPool.getResource()
println(s"rTopic.getDB(): ${rTopic.getDB()}")
println(s"rTopic.clientInfo(): ${rTopic.clientInfo()}")
rTopic.select(rTopic.getDB())
Код: Выделить всё
rTopic.getDB(): 1
rTopic.clientInfo(): id=90541 addr=172.18.0.4:39664 laddr=172.18.0.2:6379 fd=20 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22426 events=r cmd=client|info user=default redir=-1 resp=2 lib-name= lib-ver=
Проблема каким-то образом решается добавлением:
Код: Выделить всё
rTopic.select(rTopic.getDB())
Что может быть причиной этого ? Мы даже понятия не имеем, как это отладить.
Все экземпляры Jedis правильно закрыты (автоматически возвращая соединение в пул).
Подробнее здесь: https://stackoverflow.com/questions/792 ... g-database
Мобильная версия