Насколько сериализуемый используется для кэширования класса Java/ команды?

Я работаю над IBM WebSphere Commerce (WCS). В этой структуре у нас есть возможность кэшировать наш командный класс, в основном это просто классы Java. Имея новую запись в кэше, я узнал, что эти java-классы должны быть сериализуемыми (реализовать интерфейс java.io.Serializable). Это почему?

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

Спасибо заранее, Сантош

3 ответа

Решение

Для кеширования результата выполнения метода и его возврата для последующих вызовов сериализация не нужна.

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

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

Ниже приведен отрывок из документации по ehcache, который более подробно объясняет сценарий переполнения.

Когда элемент добавляется в кэш и он выходит за пределы своего максимального объема памяти, существующий элемент либо удаляется, если overflowToDisk имеет значение false, либо оценивается для буферизации на диск, если overflowToDisk имеет значение true.

В последнем случае проводится проверка на срок действия. Если срок действия истек, он удаляется; если нет, то он помещается в буфер. Исключение элемента из хранилища памяти основано на параметре "MemoryStoreEvictionPolicy", указанном в файле конфигурации.

Сериализация сохраняет сам фактический объект в его текущем состоянии.

Причина в том, что WebSphere Commerce использует функцию WebSphere Application Server Dynacache. WAS dynacache - это java-кэш в памяти, который очень похож на встроенный memcached. Изначально начальное хранилище использует dynacache для кэширования JSP, сервлетов, контроллеров, команд, командных задач и других объектов Java. На стороне БД также выполняется кэширование. Вот почему в тестах производительности IBM масштабируется намного лучше на больших объемах, чем другое программное обеспечение.

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