لقد وجدت اليوم أن طريقة الاتصال الافتراضية لـ Jedis هي jedis=new Jedis("localhost",6379)، وتحدث مهلة الاتصال دائمًا لاحقًا، ووجدت أن حزمة فئة jedis لديها أيضًا طريقة لتعيين الحد الأقصى لوقت الاتصال.
1->يجب الحصول على مثيل Jedis من JedisPool؛
2->بعد استخدام نسخة Jedis، عليك إعادتها إلى JedisPool؛
3->إذا ارتكب Jedis خطأ أثناء الاستخدام، فيجب إعادته أيضًا إلى JedisPool؛
الرمز هو كما يلي
انسخ رمز الكود كما يلي:
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
تجمع جيديس بول؛
تجمع = جديد JedisPool(config, "2xx.xx.xx.14", 6379);
boolean BorodOrOprSuccess = true;
يحاول {
جيديس = Pool.getResource();
// قم بإعادة الاختيار حسب المثيل
} قبض على (JedisConnectionException e) {
اقتراضOrOprSuccess = خطأ؛
إذا (جيديس ! = فارغة)
pool.returnBrokenResource(jedis);
} أخيراً {
إذا (bororOrOprSuccess)
pool.returnResource(jedis);
}
جيديس = Pool.getResource();
يعتمد JedisPool على حزمة فئة اباتشي
كومنز-بول-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، فهذا يعني أنه لا يوجد حد؛ هذه المرة تصبح مرهقة، في 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: إذا كان صحيحًا، فهذا يعني أن هناك مؤشر ترابط لحذف الكائن الخامل يقوم بمسح الكائن الخامل. إذا فشل التحقق من الصحة، فسيتم إسقاط الكائن من التجمع، ويكون هذا العنصر ذا معنى فقط عندما يكون timeBetweenEvictionRunsMillis أكبر من 0؛
timeBetweenEvictionRunsMillis: يشير إلى عدد المللي ثانية التي يحتاجها جهاز إزالة الكائن الخامل للنوم بين عمليتي المسح؛
numTestsPerEvictionRun: يشير إلى الحد الأقصى لعدد الكائنات التي تم فحصها بواسطة أداة إزالة الكائن الخامل في كل مرة؛
minEvictableIdleTimeMillis: يشير إلى الحد الأدنى من الوقت الذي يبقى فيه الكائن في حالة الخمول على الأقل قبل أن يتم فحصه وطرده بواسطة مبعد الكائن الخامل، ويكون هذا العنصر ذا معنى فقط عندما يكون timeBetweenEvictionRunsMillis أكبر من 0؛
softMinEvictableIdleTimeMillis: استنادًا إلى minEvictableIdleTimeMillis، تتم إضافة كائنات minIdle على الأقل إلى التجمع. إذا -1، فلن يقوم الإخلاء بطرد أي كائنات بناءً على وقت الخمول. إذا كان minEvictableIdleTimeMillis>0، فإن هذا الإعداد لا معنى له، ويكون ذا معنى فقط عندما يكون timeBetweenEvictionRunsMillis أكبر من 0؛
lifo: عندما يُرجع Object كائنًا، يتم استخدام DEFAULT_LIFO (آخر ما يدخل أولاً يخرج، قائمة الانتظار الأكثر استخدامًا والمشابهة لذاكرة التخزين المؤقت) إذا كانت خطأ، فهذا يعني قائمة انتظار FIFO؛
الإعدادات الافتراضية لـ JedisPoolConfig لبعض المعلمات هي كما يلي:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1