java - 如何在多线程环境中使用 JedisPool 创建多个 Jedis 实例
问题描述
我尝试使用 JedisPool 创建多个 Jedis 实例以供多线程使用(每个线程可以有一个 Jedis 实例)。但是当我尝试使用 JedisPool.getResource() 创建多个实例时,它总是给我相同的 Jedis 实例。redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream
由于多个线程的单个 Jedis 实例,以下代码也会给我。
private final static JedisPoolConfig poolConfig = buildPoolConfig();
private static JedisPool jedisPool = new JedisPool(poolConfig, "localhost");
public static void main(String[] args) throws Exception {
MyThread[] myThreads = new MyThread[4];
for (int i = 0; i < myThreads.length; i++) {
try (Jedis jedis = jedisPool.getResource()) {
System.out.println("jedis " + i + ": "+ jedis);
myThreads[i] = new MyThread(jedis);
myThreads[i].start();
}
}
jedisPool.close();
}
private static JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(128);
poolConfig.setMinIdle(16);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
任何帮助将非常感激。谢谢!
解决方案
您应该JedisPool
在多线程环境中使用。但是,通过您的实现,您实际上是Jedis
在这种情况下使用的。
要解决这个问题,您可以使用构造函数来JedisPool
代替。Jedis
MyThread
public static void main(String[] args) throws Exception {
MyThread[] myThreads = new MyThread[4];
for (int i = 0; i < myThreads.length; i++) {
myThreads[i] = new MyThread(jedisPool);
myThreads[i].start();
}
jedisPool.close();
}
在类中的每个操作期间,从池中MyThread
获取一个对象并使用它。Jedis
例如:
class MyThread {
void doSomething() {
try (Jedis jedis = jedisPool.getResource()) {
jedis.exists(key);
}
}
}
推荐阅读
- go - 您如何在与 libp2p-go 的直接 p2p 连接中手动刷新写入?
- android - 找不到 org.koin:koin-core:2.2.2
- python - Estimator.predict() TypeError: 期望任何非张量类型,取而代之的是张量
- android - Gradle 与 git_describe 的 CMake 问题
- reactjs - 如何在所有不同的分辨率设备上实现 100% 的标注准确率?
- python - Pandas AttributeError:“str”对象没有属性“loc”
- powerbi - PowerBI 自定义顺序轴值基于 Values
- c++ - 如何使用参数为向量的方法?
- r - 填写data.table中缺失的日期
- python - 语音识别使用python检测特定单词