Как абстрагироваться от 2 разных реализаций кеша - PullRequest
0 голосов
/ 12 декабря 2008

Я планирую использовать распределенный кеш в своем веб-приложении с балансировкой нагрузки. Поэтому я попытаюсь абстрагироваться от общих функций между apache ehcache и memcached.

Моя цель - сделать простой переход к конфигурации, чтобы выбрать решение для кэширования. Должен ли я идти по маршруту SPI, например например, как связаны парсеры XML?

Ответы [ 3 ]

1 голос
/ 12 декабря 2008

С макушки моей головы ...

  • Создание интерфейса с общими методами, связанными с кэшем (add (), remove (), refresh () приходит на ум как наиболее очевидные из них).
  • Создание реализаций этого интерфейса, которые используют требуемый кеш («MyEhCacheImplementation» и «MyMemCachedImplementation» или что-то в этом роде).
  • Создайте CacheFactory, которая возвращает некоторый тип кэша на основе простого значения, такого как число, строка или перечисление. Не забудьте сделать запасной вариант для реализации по умолчанию!
  • создать какой-то способ для внедрения этого единственного значения в фабрику при инициализации, например, если у вас есть какой-то класс, который читает различные настройки во время запуска, или вы используете Spring applicationContext.xml или что-то подобное, вам нужно создать метод инициализации для вашего кэша, который принимает этот единственный параметр, вызывает фабрику и возвращает правильный тип кэша и / или устанавливает его в каком-то месте, откуда вы его используете.

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

1 голос
/ 21 декабря 2008

Spring также имеет модуль провайдера кеша, который делает именно то, что вы ищете. Я просто не уверен, поддерживается ли memcached. Даже если нет, написание адаптера для него может оказаться менее трудоемким, чем накатывание собственного интерфейса. Смотри https://springmodules.dev.java.net/docs/reference/0.8/html_single/#cache

1 голос
/ 12 декабря 2008

После исправления интерфейса это действительно проблема создания шаблона. Внедрение зависимостей мое любимое решение, если стратегия выбора кэша является динамичной, вы можете использовать фабрики Spring Bean для принятия решений во время выполнения. Spring имеет поддержку «сессионных» областей в веб-приложениях, что означает, что вы можете разрешить фабрике принимать решения для каждой сессии, если хотите.

В противном случае простой сервисный локатор также должен делать свое дело.

http://en.wikipedia.org/wiki/Service_locator_pattern

...