2015-12-15 3 views
2

Я заметил, что в соответствии с документацией для создания кеша вам необходимо создать экземпляр или получить CacheManager и добавить к нему кэш.Нужно ли всегда использовать CacheManager?

singletonManager = CacheManager.create(); 
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2); 
singletonManager.addCache(memoryOnlyCache); 
Cache test = singletonManager.getCache("testCache"); 

Однако следующий код, кажется, работает

public class MyCache { 

    private static Cache cache = null; 

    ... 

    private MyCache() { 
     cache = new Cache(cacheName, 200, MemoryStoreEvictionPolicy.LFU, false, null, false, timeToLiveSeconds, 0L, false, 0, null); 
     cache.initialise(); 
    } 
} 

Так что мои вопросы:

1/Почему это работает? Я проверил, что могу добавлять или удалять записи, и срок действия кеша истек.

2/Если это будет работать, но не является надлежащим способом его реализации, почему инициализация является общедоступной ?. Он может иметь доступ по умолчанию.

ответ

2

Для обеспечения кешей для Ehcache 2.x требуется CacheManager. Это документированный и рекомендуемый способ использования кешей. A Cache, не связанный с CacheManager, может вызвать всевозможные проблемы, особенно для более сложных функций.

Некоторые из функций, которые несет в CacheManager:

  • Репозитарий Cache s
  • Cache инициализации
    • Включает некоторые двунаправленного связывания, что кэш и его конфигурация предполагает должным образом комплект
  • РазмерOf eng поставщик ине для на кучного байт проклейки
  • Transaction менеджер поставщика
  • Статистика исполнитель поставщик
  • ARC поставщик пулы

Причина возможность построить и инициализацию Cache проживает в силу исторических причин (API, Cache являющийся классом, а не интерфейсом) и желание сохранить обратную совместимость.

Ehcache 3.x придет с концепцией управляемым пользователем кешами, то есть кешами, которые не связаны с CacheManager. Они будут хорошо подходят для использования, когда вам нужны только функции put/get/evict/expiry.

+0

При использовании нескольких кэшей через узлы CacheManagers позволяет настраивать CacheManagerPeerListeners, CacheManagerPeerProviders и т. Д., Которые полезны при распространении любых изменений в кэш или кэш-записи, чтобы убедиться, что все они синхронизированы или нестабильны. Сценарий реального времени - использование Ehcache в качестве кэша второго уровня спящего режима, развернутого на нескольких узлах. –

+0

Спасибо за ваш ответ @Louis. Я согласен с тем, что говорится в документации ehCache 2.x. То, что я хотел бы понять, - вот что такое ** CacheManager **. Можно ли назвать несколько проблем? (т. е. выселение, переполнение диска, постоянство, ...) – martinchin2289

+0

Перечислены некоторые из обязанностей –

Смежные вопросы