Какой кэш использовать в приложении Spring boot, чтобы избежать избыточных вызовов базы данных?

#mysql #spring #database

#mysql #spring #База данных

Вопрос:

Я разрабатываю приложение типа pastebin. Кто-то может войти на веб-сайт и ввести некоторые тексты, и он получает URL. Любой пользователь с этим URL-адресом может получить доступ к тексту, который был введен ранее. Например, https://pastebin.com/eWCfCck1 . Открытие этого URL

Я создал страницу под названием История прошлых изменений, чтобы любой мог видеть все свои ранее сохраненные тексты. Я использую серверную часть Spring boot, которая вызывает запрос к базе данных в MYSQL и извлекает список ранее сохраненного текста для пользователя.

 @GetMapping(value = "/pastEditHistory")
public String user(Principal principal, Model model, HttpSession httpSession){
    //Fetch the email of this user
    LinkedHashMap<Object,Object> map = (LinkedHashMap<Object, Object>)
            ((OAuth2Authentication) principal).getUserAuthentication().getDetails();
    String emailId = (String) map.get("email");
    
    //Find all the past stored texts for this user. Each PastedNote has the text and URL of the page
    List<PastedNote> pasteNotes = pastebinRepository.findByAccountIdOrderByTimestampDesc(emailId);
    //Storing in model to be viewed (rendered) on the frontend HTML
    model.addAttribute("pasteNotes",pasteNotes);
    // Http Session storing 
    httpSession.setAttribute("tier",accountInfo.getTier());
    return "editHistory";
}
 
  1. Каждое обновление на этой странице будет вызовом базы данных (что может занять некоторое время). Возможно ли получить триггер из базы данных, если вставлена какая-либо новая информация, а затем выполнить только вызов DB?
  2. Предположим, что в базе данных нет новых обновлений, и я знаю, что для этой учетной записи эти тексты останутся прежними. Является ли хранение в httpsession хорошим вариантом и использование его в качестве временного хранилища хорошим вариантом? (Чтобы, если я перейду на какую-то другую страницу и вернусь к прошлой странице истории редактирования, я мог загружаться из HttpSession вместо вызова базы данных?

Ответ №1:

Я думаю, что то, что вы ищете, — это Hibernate second-level-cache :

 <property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>