gpt4 book ai didi

java - 使用 JedisPool 的 Redis 连接池变得过于冗长

转载 作者:可可西里 更新时间:2023-11-01 11:30:03 30 4
gpt4 key购买 nike

这是我的JedisFactory

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

class JedisFactory {
private static JedisPool jedisPool;
private static JedisFactory instance;

public JedisFactory() {
jedisPool = new JedisPool(getPoolConfig(), "localhost");
}

private JedisPoolConfig getPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
//poolConfig.setTestOnBorrow(true);
//poolConfig.setTestOnReturn(true);
poolConfig.setMaxIdle(2);
// Tests whether connections are dead during idle periods
//poolConfig.setTestWhileIdle(true);
poolConfig.setMaxTotal(2);
//poolConfig.setMaxWaitMillis(120000);
return poolConfig;
}

public JedisPool getJedisPool() {
System.out.println("get pool");
return jedisPool;
}

public static JedisFactory getInstance() {
if (instance == null) {
instance = new JedisFactory();
}
return instance;
}
}

这里是用法:

public static void del(String key) {
Jedis jedis = JedisFactory.getInstance().getJedisPool().getResource();
try {
jedis.del(key);
} finally {
JedisFactory.getInstance().getJedisPool().returnResource(jedis);
}
}


public static String ping() {
Jedis jedis = JedisFactory.getInstance().getJedisPool().getResource();
try {
return jedis.ping();
} finally {
JedisFactory.getInstance().getJedisPool().returnResource(jedis);
}
}
public static void clear() {
Jedis jedis = JedisFactory.getInstance().getJedisPool().getResource();
try {
jedis.flushAll();
} finally {
JedisFactory.getInstance().getJedisPool().returnResource(jedis);
}
}

因此,对于每个操作,我都必须输入大量样板代码。如何避免?

最佳答案

  1. 您的 JedisFactory.getInstance() 工厂方法不是线程安全的。您可以同时拥有多个 JedisFactory 实例。

  2. 如果您使用 JDK 7 和最近的 Jedis 版本,您可以只使用 try-with-resource。

    尝试(Jedis jedis = JedisFactory.getInstance().getJedisPool().getResource()) { jedis.flushAll();

上面的代码可以工作。

  1. 由于 JedisPool 是线程安全的,您可以只初始化 JedisPool 并传递到任何地方。如果你想继续使用 JedisFactory,你可以通过添加像 JedisFactory.getResource() 这样的 util 方法来最小化你的代码,让 getResource() 为调用者做所有的工作。由于您创建了 JedisFactory,因此无需向公众公开内部 JedisPool 字段。

关于java - 使用 JedisPool 的 Redis 连接池变得过于冗长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697363/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com