Hari ini saya menemukan bahwa metode koneksi default Jedis adalah jedis=new Jedis("localhost",6379), dan batas waktu koneksi selalu terjadi. Kemudian saya menemukan bahwa paket kelas jedis juga memiliki cara untuk mengatur waktu koneksi maksimum.
1->Mendapatkan instance Jedis harus diperoleh dari JedisPool;
2->Setelah menggunakan instance Jedis, Anda harus mengembalikannya ke JedisPool;
3->Jika Jedis membuat kesalahan saat digunakan, itu juga perlu dikembalikan ke JedisPool;
Kodenya adalah sebagai berikut
Copy kode kodenya sebagai berikut:
Konfigurasi JedisPoolConfig = JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
Kolam JedisPool;
pool = new JedisPool(config, "2xx.xx.xx.14", 6379);
boolean peminjamanOrOprSuccess = true;
mencoba {
jedis = pool.getResource();
// lakukan redis opt berdasarkan contoh
} tangkapan (JedisConnectionException e) {
pinjamOrOprSukses = false;
jika (jedis != nol)
pool.returnBrokenResource(jedis);
} Akhirnya {
jika (pinjamAtauOprSukses)
pool.returnResource(jedis);
}
jedis = pool.getResource();
JedisPool bergantung pada paket kelas Apache
commons-pool-1.5.6.jar
1->Meskipun JedisConnectionException dilemparkan, sebenarnya ada dua jenis kesalahan. Salah satunya adalah pool.getResource(), yang tidak bisa mendapatkan instance jedis yang tersedia; yang lainnya adalah kesalahan selama jedis.set/get juga akan memunculkan Pengecualian ini; Untuk mewujudkan perbedaan tersebut, diimplementasikan berdasarkan apakah instance tersebut null. Jika null, itu membuktikan bahwa instance tersebut belum diinisialisasi sama sekali, sehingga tidak perlu mengembalikannya ke pool jika instance tersebut bukan nol, itu membuktikan perlu dikembalikan ke pool;
2->Ketika terjadi kesalahan instance, returnBrokenResource juga harus dipanggil untuk mengembalikannya ke pool. Jika tidak, mungkin masih ada data di buffer instance yang diperoleh melalui getResource di lain waktu, dan masalah mungkin terjadi!
Parameter konfigurasi JedisPool sangat bergantung pada persyaratan aplikasi aktual serta kemampuan perangkat lunak dan perangkat keras. Saya belum pernah menggunakan commons-pool sebelumnya, jadi kali ini saya menghabiskan seluruh ruangan untuk melihat arti dari parameter ini. . . Sebagian besar parameter konfigurasi JedisPool ditetapkan oleh item JedisPoolConfig yang sesuai.
maxActive: Mengontrol berapa banyak instance jedis yang dapat dialokasikan dalam suatu pool, diperoleh melalui pool.getResource(); jika nilainya -1, berarti tidak ada batasan; jika pool telah mengalokasikan instance jedis maxActive, status pool di kali ini menjadi Habis, di JedisPoolConfig
maxIdle: Mengontrol jumlah maksimum instance jedis dalam status idle yang dapat dimiliki suatu pool;
ketikaExhaustedAction: Menunjukkan tindakan yang akan diambil oleh kumpulan ketika semua instance jedis di kumpulan telah dialokasikan; ada tiga jenis WHEN_EXHAUSTED_FAIL secara default (yang berarti ketika tidak ada instance jedis, maka akan langsung dilempar.
NoSuchElementException), WHEN_EXHAUSTED_BLOCK (berarti diblokir, atau JedisConnectionException dilemparkan ketika maxWait tercapai), WHEN_EXHAUSTED_GROW (berarti instance jedis baru dibuat, yang berarti set maxActive tidak berguna);
maxWait: menunjukkan waktu tunggu maksimum saat meminjam instance Jedis. Jika waktu tunggu terlampaui, JedisConnectionException akan langsung dilempar;
testOnBorrow: Saat meminjam instance jedis, apakah akan melakukan operasi Alidate terlebih dahulu, jika benar, instance jedis yang diperoleh tersedia;
testOnReturn: apakah akan melakukan operasi validasi terlebih dahulu saat kembali ke kumpulan;
testWhileIdle: Jika benar, berarti ada thread penghindar objek menganggur yang memindai objek menganggur. Jika validasi gagal, objek akan dikeluarkan dari kumpulan;
timeBetweenEvictionRunsMillis: menunjukkan jumlah milidetik yang dibutuhkan penghindar objek menganggur untuk tidur di antara dua pemindaian;
numTestsPerEvictionRun: Menunjukkan jumlah maksimum objek yang dipindai oleh penghindar objek menganggur setiap kali;
minEvictableIdleTimeMillis: Menunjukkan waktu minimum bagi suatu objek untuk tetap dalam keadaan diam setidaknya sebelum dapat dipindai dan dikeluarkan oleh penghindar objek yang menganggur; item ini hanya berarti ketika timeBetweenEvictionRunsMillis lebih besar dari 0;
softMinEvictableIdleTimeMillis: Berdasarkan minEvictableIdleTimeMillis, setidaknya objek minIdle ditambahkan ke kumpulan. Jika -1, diusir tidak akan mengusir objek apa pun berdasarkan waktu idle. Jika minEvictableIdleTimeMillis>0, pengaturan ini tidak ada artinya, dan hanya bermakna bila timeBetweenEvictionRunsMillis lebih besar dari 0;
lifo: Ketika BorobObject mengembalikan suatu objek, DEFAULT_LIFO (terakhir masuk pertama keluar, antrian yang paling sering digunakan mirip dengan cache) digunakan.
Pengaturan default JedisPoolConfig untuk beberapa parameter adalah sebagai berikut:
tesWhileIdle=benar
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1