Как абстрагироваться от двух разных реализаций кеша

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
629
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Ответ принят как подходящий

С макушки ...

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

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

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

Другие вопросы по теме