Infinispan يعادل CopyOnread's Ehcache و CopyOnwrite
-
04-10-2019 - |
سؤال
أخطط لتنفيذ حل ذاكرة التخزين المؤقت في تطبيق ويب موجود. لا شيء معقد: في الأساس خريطة متزامنة تدعم التفيض للقرص والإخلاء التلقائي. قد يكون تجميع ذاكرة التخزين المؤقت مطلبًا في المستقبل ، ولكن ليس الآن.
أحب ميزات Ehcache's CopyOnRead و CopyOnwrite ، لأنه يعني أنه لا يتعين علي استنساخ الأشياء يدويًا قبل تعديل شيء أخرجه من ذاكرة التخزين المؤقت. الآن بدأت في النظر إلى Infinispan, ، لكنني لم أجد أي شيء مكافئ هناك. هل تتواجد؟
أي ، يجب أن تمر اختبارات الوحدة التالية:
@Test
public void testCopyOnWrite() {
Date date = new Date(0);
cache.put(0, date);
date.setTime(1000);
date = cache.get(0);
assertEquals(0, date.getTime());
}
@Test
public void testCopyOnRead() {
Date date = new Date(0);
cache.put(0, date);
assertNotSame(cache.get(0), cache.get(0));
}
المحلول
وفقًا لمطور JBOSS ، فإن Infinispan لا يدعم هذه الميزة بعد. يجب عليك تسجيل طلب لتحسين في Infinispan القضية تعقب, ، حتى يتمكن الآخرون من التصويت عليه (سأفعل).
أن يقال ، إذا كنت بحاجة إلى هذه الميزة حاليا, ، سيكون الحل البديل هو تمديده AbstractDelegatingCache, وتجاوز get
و put
طرق لإضافة هذه الوظيفة. يمكنك استخدام استراتيجية النسخ الخاصة بك أو إلقاء نظرة على كيفية قيام Ehcache بذلك للإلهام.
أيضا ، قد تفكر في منتدى Infinispan إذا كان لديك أسئلة أخرى ، حيث سيكون لديك المزيد من الآراء من مجتمع Infinispan.
نصائح أخرى
Infinispan يفعل دعم CopyOnRead/CopyOnwrite ، وإن كان التنسيق الفعلي غير قابل للتطبيق. عنصر التكوين هو Lazydeserialization في Infinispan 4.x و storeasbinary في Infinispan 5.x. يتم تسلسل الكائنات باستخدام إطار عمل Marshaller القابل للتوصيل ، والذي يستخدم لجميع أشكال التنظيم بما في ذلك مكالمات RPC عبر شبكة وتخزين إلى القرص.
أعتقد storeAsBinary
لا يسري سريانه إلا عندما تحتاج الكائنات إلى التسلسل وهذا يعني عندما أ put
يتم استدعاء العملية ، المالك ليس العقدة الحالية.
هذا يعني أيضًا أن حالات الاختبارات في السؤال يمكن أن تمر إذا كان صاحب المفتاح 0
ليست العقدة الحالية ، لكنها ستظل تفشل إذا كانت بيئة عقدة واحدة.