วันนี้ฉันพบว่าวิธีการเชื่อมต่อเริ่มต้นของ Jedis คือ jedis=new Jedis("localhost",6379) และการหมดเวลาการเชื่อมต่อจะเกิดขึ้นเสมอ ต่อมาฉันพบว่าแพ็คเกจคลาส jedis มีวิธีตั้งเวลาการเชื่อมต่อสูงสุดด้วย
1->การรับอินสแตนซ์ Jedis จะต้องได้รับจาก JedisPool
2->หลังจากใช้อินสแตนซ์ Jedis หมดแล้ว คุณจะต้องส่งคืนมันกลับไปที่ JedisPool
3->หาก Jedis ทำข้อผิดพลาดระหว่างการใช้งาน จะต้องส่งคืน JedisPool ด้วย
รหัสมีดังนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
JedisPoolConfig config = JedisPoolConfig ใหม่();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1,000l);
สระว่ายน้ำเจดิส;
พูล = JedisPool ใหม่ (config, "2xx.xx.xx.14", 6379);
บูลีนยืมOrOprSuccess = จริง;
พยายาม {
เจดิส = pool.getResource();
// ทำการเลือก Redis ตามอินสแตนซ์
} จับ (JedisConnectionException e) {
ยืมOrOprSuccess =เท็จ;
ถ้า (เจดิส != null)
pool.returnBrokenResource(เจดิส);
} ในที่สุด {
ถ้า (ยืมหรือOprSuccess)
pool.returnResource(เจดิส);
-
เจดิส = pool.getResource();
JedisPool ขึ้นอยู่กับแพ็คเกจคลาส apache
คอมมอนส์พูล-1.5.6.jar
1->ถึงแม้ว่า JedisConnectionException จะถูกโยนทิ้งไป แต่จริงๆ แล้วมีข้อผิดพลาดสองประเภท หนึ่งคือ pool.getResource() ซึ่งไม่สามารถรับอินสแตนซ์ jedis ที่มีอยู่ได้ อีกประการหนึ่งคือข้อผิดพลาดระหว่าง jedis.set/get จะส่งข้อยกเว้นนี้ด้วย เพื่อให้ทราบถึงความแตกต่าง จะมีการใช้งานโดยขึ้นอยู่กับว่าอินสแตนซ์นั้นเป็นโมฆะหรือไม่ จะเป็นการพิสูจน์ว่าอินสแตนซ์นั้นไม่ได้เริ่มต้นเลย ดังนั้นจึงไม่จำเป็นต้องส่งคืนอินสแตนซ์นั้น ไม่เป็นโมฆะพิสูจน์ว่าต้องส่งคืนพูล
2->เมื่อเกิดข้อผิดพลาดของอินสแตนซ์ จะต้องเรียก returnBrokenResource เพื่อส่งคืนไปยังพูล มิฉะนั้น อาจยังมีข้อมูลอยู่ในบัฟเฟอร์ของอินสแตนซ์ที่ได้รับผ่าน getResource ในครั้งต่อไป และอาจเกิดปัญหาได้!
พารามิเตอร์การกำหนดค่าของ JedisPool ส่วนใหญ่ขึ้นอยู่กับข้อกำหนดการใช้งานจริงและความสามารถของซอฟต์แวร์และฮาร์ดแวร์ ฉันไม่เคยใช้ commons-pool มาก่อน ดังนั้นคราวนี้ฉันใช้เวลาทั้งห้องเพื่อดูความหมายของพารามิเตอร์เหล่านี้ - - พารามิเตอร์การกำหนดค่าส่วนใหญ่ของ JedisPool ได้รับการกำหนดโดยรายการที่สอดคล้องกันของ JedisPoolConfig
maxActive: ควบคุมจำนวนอินสแตนซ์ jedis ที่สามารถจัดสรรได้ โดยได้รับผ่าน pool.getResource() หากค่าเป็น -1 แสดงว่าไม่มีขีดจำกัด หากพูลได้จัดสรรอินสแตนซ์ maxActive jedis สถานะของพูลที่ คราวนี้หมดแรงใน JedisPoolConfig
maxIdle: ควบคุมจำนวนสูงสุดของอินสแตนซ์ jedis ในสถานะไม่ได้ใช้งานที่พูลสามารถมีได้
whenExhaustedAction: ระบุการดำเนินการที่จะดำเนินการโดยพูลเมื่อมีการจัดสรรอินสแตนซ์ jedis ทั้งหมดในพูล มี WHEN_EXHAUSTED_FAIL สามประเภทตามค่าเริ่มต้น (ซึ่งหมายความว่าเมื่อไม่มีอินสแตนซ์ jedis จะถูกโยนโดยตรง
NoSuchElementException), WHEN_EXHAUSTED_BLOCK (หมายความว่าถูกบล็อก หรือ JedisConnectionException ถูกส่งออกไปเมื่อถึง maxWait), WHEN_EXHAUSTED_GROW (หมายความว่ามีการสร้างอินสแตนซ์ jedis ใหม่ ซึ่งหมายความว่าชุด maxActive นั้นไร้ประโยชน์);
maxWait: ระบุเวลารอสูงสุดเมื่อยืมอินสแตนซ์ Jedis หากเกินเวลารอ JedisConnectionException จะถูกส่งออกไปโดยตรง
testOnBorrow: เมื่อยืมอินสแตนซ์ jedis ไม่ว่าจะดำเนินการ Alidate ล่วงหน้าหรือไม่ หากเป็นจริง อินสแตนซ์ jedis ที่ได้รับจะพร้อมใช้งาน
testOnReturn: จะดำเนินการตรวจสอบล่วงหน้าเมื่อกลับไปที่พูลหรือไม่
testWhileIdle: หากเป็นจริง หมายความว่ามีเธรด evitor ที่ไม่ได้ใช้งานสแกนวัตถุที่ไม่ได้ใช้งาน หากการตรวจสอบล้มเหลว วัตถุจะถูกลบออกจากพูล รายการนี้มีความหมายเฉพาะเมื่อ timeBetweenEvictionRunsMillis มากกว่า 0;
timeBetweenEvictionRunsMillis: ระบุจำนวนมิลลิวินาทีที่ตัวแก้ไขอ็อบเจ็กต์ที่ไม่ได้ใช้งานจำเป็นต้องเข้าสู่โหมดสลีประหว่างการสแกนสองครั้ง
numTestsPerEvictionRun: ระบุจำนวนสูงสุดของออบเจ็กต์ที่สแกนโดยตัวแก้ไขออบเจ็กต์ที่ไม่ได้ใช้งานในแต่ละครั้ง
minEvictableIdleTimeMillis: ระบุเวลาขั้นต่ำสำหรับอ็อบเจ็กต์ที่จะอยู่ในสถานะไม่ได้ใช้งานอย่างน้อยก่อนที่จะสามารถสแกนและขับออกโดยตัวแก้ไขอ็อบเจ็กต์ที่ไม่ได้ใช้งาน รายการนี้มีความหมายเฉพาะเมื่อ timeBetweenEvictionRunsMillis มากกว่า 0;
softMinEvictableIdleTimeMillis: ขึ้นอยู่กับ minEvictableIdleTimeMillis อ็อบเจ็กต์ minIdle อย่างน้อยจะถูกเพิ่มลงในพูล ถ้า -1 การขับไล่จะไม่ขับไล่วัตถุใดๆ ตามเวลาที่ไม่ได้ใช้งาน หาก minEvictableIdleTimeMillis>0 การตั้งค่านี้ไม่มีความหมาย และจะมีความหมายเฉพาะเมื่อ timeBetweenEvictionRunsMillis มากกว่า 0;
lifo: เมื่อยืมวัตถุส่งคืนวัตถุ DEFAULT_LIFO (เข้าก่อนออกก่อน คิวที่ใช้บ่อยที่สุดคล้ายกับแคช) จะถูกใช้ หากเป็นเท็จ แสดงว่าคิว FIFO
การตั้งค่าเริ่มต้นของ JedisPoolConfig สำหรับพารามิเตอร์บางตัวมีดังนี้:
ทดสอบWhileIdle=true
minEvictableIdleTimeMills=60000
เวลาระหว่าง EvictionRunsMillis=30000
numTestsPerEvictionRun=-1