سؤال

أخطط لتنفيذ حل ذاكرة التخزين المؤقت في تطبيق ويب موجود. لا شيء معقد: في الأساس خريطة متزامنة تدعم التفيض للقرص والإخلاء التلقائي. قد يكون تجميع ذاكرة التخزين المؤقت مطلبًا في المستقبل ، ولكن ليس الآن.

أحب ميزات 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 ليست العقدة الحالية ، لكنها ستظل تفشل إذا كانت بيئة عقدة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top