I am using ConnectionPoolConfig + UnifiedJedis + Transaction. I am new for the redis using redis.clients 4.4.0-rc1, i have two questions
1 - can i use ConnectionPoolConfig in this way?
2 - Whats is the use of poolConfig.setMaxTotal()? in the code i have set poolConfig.setMaxTotal(250) but when i had increased load(set i < 500 in run method for loop) then i seen it uses 500+ clients (seen in RedisInsight UI)
import java.time.Duration;
import java.util.Date;
import redis.clients.jedis.ConnectionPoolConfig;
import redis.clients.jedis.JedisPooled;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.UnifiedJedis;
class MultithreadingDemo extends Thread {
private static final ConnectionPoolConfig connectionPoolConfig=buildConfigPool();
private static final UnifiedJedis jedis = new JedisPooled(connectionPoolConfig, "localhost", 6379);
private static ConnectionPoolConfig buildConfigPool()
{
final ConnectionPoolConfig poolConfig ;
poolConfig = new ConnectionPoolConfig();
poolConfig.setMaxTotal(250);
poolConfig.setMaxIdle(50);
poolConfig.setMinIdle(50);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTime(Duration.ofSeconds(60));
poolConfig.setTimeBetweenEvictionRuns(Duration.ofSeconds(30));
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
public void run() {
System.out.println(" Start - " + Thread.currentThread().getId() + " - " + new Date());
for (int i = 0; i < 10; i++) {
Transaction tr = jedis.multi();
tr.jsonSetLegacy(System.currentTimeMillis() + " - " + Thread.currentThread().getId() + "ABC","Value");
tr.exec();
}
System.out.println(" End - " + Thread.currentThread().getId() + " - " + new Date());
}
}
// Main Class
public class Multithread {
public static void main(String[] args)
{
int n = 5; // Number of threads
for (int i = 0; i < n; i++) {
MultithreadingDemo object
= new MultithreadingDemo();
object.start();
}
}
}