Во время написания сложного веб-приложения мы поняли, что часто получаем один и тот же DAO во время вызова API. Это может произойти из-за того, что приложение имеет несколько слоев. Мы хотели бы избежать получения одного и того же объекта из базы данных несколько раз за один запрос. Единственное решение, которое можно использовать, - это контекст потока. Мы могли бы кэшировать там уже запрошенные объекты из базы данных, и во 2-й раз, когда система запросит то же самое, он будет возвращен из контекста потока вместо базы данных. Это может работать, но все мы знаем, что это может быть не лучшим вариантом, в то время как приложение может иметь фоновые потоки, где такое кэширование не будет хорошей практикой.

(Мы используем MongoDB, если это важно)

Если вы знаете другое решение этой проблемы, пожалуйста, дайте мне знать :)

0
Arnold Robert Turdean 17 Апр 2020 в 13:18

2 ответа

Вам нужно что-то вроде кэширования на уровне доступа к данным, возможно, шаблон в стороне от кэша - я был используя для этого ehcache. Это дает вам протестированную, настраиваемую библиотеку без использования ThreadLocal и т. Д.

Эта тема похожа на формулировку проблемы в вашем сообщении - взгляните на некоторые ответов там.

0
Dylan Morley 17 Апр 2020 в 11:51

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

https://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/cache.html

0
Thomas Andolf 17 Апр 2020 в 12:00