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

java — Ngoại lệ đường ống Jedis

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

Khi tôi sử dụng jedis như đoạn mã sau:

lớp công khai JedisTest mở rộng Đồng bộ hóa {
Chuỗi cuối cùng tĩnh riêng tư _SET_KEY_1 = "test1";
Chuỗi cuối cùng tĩnh riêng tư _SET_KEY_2 = "test2";

quy trình void công khai () ném SQLException {
Đặt appSet = getAllUserableAppkey();
cuối cùng ShardedJedis jedis = RedisHelper.getJedis();
đường ống ShardedJedisPipeline cuối cùng = jedis.pipeline();

for (Khóa chuỗi: appSet) {
Đặt result = jedis.smembers(_SET_KEY_1);
Đặt result2 = jedis.smembers(_SET_KEY_2);
Chuỗi rangName = String.format("%s::%s", "test", key);
vì (int i = 0; i < 10; i++) {
pipe.sadd(rangName, String.valueOf(i));
}
}
pipe.sync();
}

Bộ công khai getAllUserableAppkey() {

}

public static void main(String[] args) throws Exception {
DbHelper.init();
RedisHelper.init();
JedisTest jedisTest = JedisTest mới();
thử {
jedisTest.process();
} bắt (SQLException e) {
e.printStackTrace();
}
}
}

Nó ném ngoại lệ như thế này:

Ngoại lệ trong luồng "chính" java.lang.ClassCastException: java.lang.Long không thể chuyển sang java.util.List
tại redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:224)
tại redis.clients.jedis.Connection.getMultiBulkReply(Connection.java:217)
tại redis.clients.jedis.Jedis.smembers(Jedis.java:1055)
tại redis.clients.jedis.ShardedJedis.smembers(ShardedJedis.java:339)
tại com.snda.sync.impl.test.JedisTest.process(JedisTest.java:29)
tại com.snda.sync.impl.test.JedisTest.main(JedisTest.java:58)
tại sun.reflect.NativeMethodAccessorImpl.invoke0(Phương thức gốc)
tại sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
tại sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
tại java.lang.reflect.Method.invoke(Method.java:606)
tại com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Tôi có thể sửa đổi mã để sửa:

quy trình void công khai () ném SQLException {
Đặt appSet = getAllUserableAppkey();
cuối cùng ShardedJedis jedis = RedisHelper.getJedis();
for (Khóa chuỗi: appSet) {
đường ống ShardedJedisPipeline cuối cùng = jedis.pipeline();
Đặt result = jedis.smembers(_SET_KEY_1);
Đặt result2 = jedis.smembers(_SET_KEY_2);
//log.warn("result1 :{},result2:{}",result,result2);
Chuỗi rangName = String.format("%s::%s", "test", key);
vì (int i = 0; i < 10; i++) {
pipe.sadd(rangName, String.valueOf(i));
}
pipe.sync();
}
}

Nhưng tôi không biết tại sao lại có ngoại lệ,đường ống.sadd() dù với jedis.smembers xung đột? Cảm ơn bạn đã trả lời tôi!

Jedi mới nhất: 2.7.2

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

Bạn không nên sử dụng trực tiếp các phiên bản Jedis khi tạo đường ống.

Các ống sử dụng luồng của phiên bản Jedis (không khởi tạo luồng mới) và vì hoạt động bình thường sẽ đọc phản hồi ngay lập tức trong khi các ống đọc toàn bộ phản hồi sau đó, việc nhầm lẫn giữa hai cách sử dụng có thể khiến Jedi gặp rắc rối.

P -- loại dây chuyền lắp ráp/N -- thông thường

Yêu cầu --> P(1) P(2) N(3) N(4) P(5)

Phản hồi lại --> P(1) P(2) N(3) N(4) P(5)

Khớp yêu cầu-phản hồi --> N(1: phải là 3) N(2: phải là 4) P(3: phải là 1) P(4: phải là 2) P(5)

Bạn có thể thấy rằng các câu trả lời có thể dễ dàng bị sai sót.

Về ngoại lệ đường ống java - Jedis, 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/31182303/

29 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