cuốn sách gpt4 ai đã làm

android — Nhóm Jedis được khởi tạo nhiều lần

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 11:15:06 27 4
mua khóa gpt4 Nike

tôi ở đây jedis Được sử dụng với sự giúp đỡ của khách hàng làm lại. Đoạn mã được đính kèm để cài đặt/nhận giá trị khóa tại đây. Ở đây tôi muốn của tôi jedisPool Nó chỉ được khởi tạo một lần nhưng được khởi tạo nhiều lần. Không biết mình đã sai ở đâu. Tôi gãi đầu với nó nhiều ngày. Tôi không biết tại sao nó lại khởi tạo nhiều lần.

//$Id$
gói thí nghiệm.with.truth;

nhập redis.clients.jedis.Jedis;
nhập redis.clients.jedis.JedisPool;
nhập redis.clients.jedis.JedisPoolConfig;

lớp công khai RedisClientUtil {

nhóm JedisPool tĩnh riêng // Tôi cho rằng giá trị điếc được khởi tạo trong biến tĩnh của tôi sẽ là null
int tĩnh maxActiveConnections = 8;
int tĩnh maxWaitInMillis = 2000;
Máy chủ chuỗi tĩnh = "127.0.0.1";
cổng int tĩnh = 6379;
int tĩnh REDIS_DB = 1;

public static void initRedisClient() ném ngoại lệ {
thử {
Lớp classObj = Class.forName("redis.clients.jedis.JedisPool");
if (classObj != null && pool == null) {
JedisPoolConfig jedisConfig = JedisPoolConfig mới();
jedisConfig.setMaxTotal(maxActiveConnections);
jedisConfig.setMaxWaitMillis(maxWaitInMillis);
pool = JedisPool mới (jedisConfig, máy chủ, cổng);

System.out.println("Khởi tạo nhóm thành công!");
}
} bắt(ClassNotFoundException ex) {
System.out.println("Không thể khởi chạy redis do không có jedis jar trong máy của bạn. Ngoại lệ: " + ex);
}
}
Jedi công khai getJedisConnection() {
if(pool == null) {
initRedisClient();
}
return pool.getResource();
}
khoảng trống tĩnh riêng tư returnJedis(Jedis jedis) {
thử {
pool.returnResource(jedis);
} bắt(Ngoại lệ cũ) {
ex.printStackTrace();
}
}
Chuỗi tĩnh công khai getValue(Khóa chuỗi) ném Ngoại lệ{
Jedis jedisCon = null;
thử {
jedisCon = getJedisConnection();
jedisCon.select(REDIS_DB);

Chuỗi val = jedisCon.get(key);
trả lại giá trị;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedisCon != null) {
returnJedis(jedisCon);
}
}
return null;
}
public void addValueToRedis(Khóa chuỗi, Giá trị chuỗi) {
Jedis jedisCon = null;
thử {
jedisCon = getJedisConnection();
jedisCon.select(REDIS_DB);

jedisCon.set(khóa, giá trị);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedisCon != null) {
returnJedis(jedisCon);
}
}
}
public static void main(String[] args) {
// TODO sơ khai phương thức được tạo tự động
System.out.println("Giá trị : " + getValue("a"));
System.out.println("Giá trị : " + getValue("b"));
System.out.println("Giá trị : " + getValue("c"));
}
}

Khi chương trình của tôi đang chạy, tôi có thể thấy nhật ký gỡ lỗi này nhiều lầnNhóm khởi tạo thành công. Ai đó có thể giúp tôi tìm lỗ hổng này? Hoặc làm cách nào tôi có thể làm cho nó tốt hơn (hoặc làm cho nó hoạt động như mong đợi) bằng cách chỉ khởi tạo nó một lần trong toàn bộ chương trình.

câu trả lời hay nhất

Trông giống như một trường hợp đa luồng cơ bản. Ứng dụng của bạn yêu cầu 5 kết nối trong một khoảng thời gian ngắn. Tất cả họ đều nhìn thấy pool==null và tiến hành khởi tạo nó.

Giải pháp đơn giản:public static được đồng bộ hóa void initRedisClient() ném ngoại lệ {

gia hạnnhóm JedisPool tĩnh tĩnh riêng tư;Nếu không, bạn có thể nhận được ngoại lệ con trỏ null.

Để có giải pháp phức tạp và hiệu quả hơn, hãy tìm kiếm "singleton lười biếng hiệu quả trong java" rất có thể sẽ dẫn bạn đếnliệt kê giải pháp.

Về việc java - nhóm Jedis được khởi tạo nhiều lần, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/51632756/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress