Вопрос

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

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

Это было полезно?

Решение

Из головы...

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top