Как запустить приложение для обновления кэша, если данные были изменены в хранилище (БД) другим приложением? - PullRequest
0 голосов
/ 04 сентября 2018

Существует 2 java-приложения, оба используют ORM и кэшируют данные на своих собственных кешах. Оба работают с одной и той же БД.

1-е приложение изменило некоторые данные в БД, так как позволить 2-му приложению обновить свой кэш? Существуют ли стандартные решения для таких вопросов?

1 Ответ

0 голосов
/ 04 сентября 2018

Вместо того, чтобы пытаться синхронизировать кэшированные данные между двумя экземплярами сервера, почему бы не централизовать кэширование, а использовать что-то вроде memcached / couchbase или redis? Использование распределенного кэширования с чем-то вроде ehcache намного сложнее и подвержено ошибкам IMO по сравнению с централизацией кэшированных данных с использованием сервера кэширования, подобного упомянутому.

В качестве дополнения к моему первоначальному ответу при принятии решения о том, какой подход кэширования использовать (в памяти, централизованно), следует учитывать одну вещь - изменчивость данных, которые кэшируются.

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

Если в данных действительно есть уровень волатильности (например, вы кешируете, просматривали данные сущностей из БД, чтобы сохранить попадания в БД), то я все же думаю, что централизованное кэширование - это лучший подход, чем Распределение памяти и синхронизированное кэширование. Вам просто нужно убедиться, что вы используете соответствующий срок действия для кэшированных данных, чтобы время от времени обновлять данные естественным образом. Кроме того, вы можете просто удалить кэшированные данные из централизованного хранилища, когда они находятся в пути обновления для конкретной сущности, а затем просто перезагружать их из кэша при следующем запросе этих данных. Это лучше IMO, чем пытаться создать настоящий сквозной кэш, в котором вы записываете данные в основное хранилище, а также в кеш. Сама БД может вносить изменения в данные (например, путем установки значений по умолчанию для неподдерживаемых значений), и ваши кэшированные данные в этом случае могут не совпадать с данными в БД

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...