Итак, в предыдущем посте мы проверили, как использовать Redis с загрузкой spring в качестве базы данных. В этом посте мы собираемся обсудить, как использовать Redis в качестве хранилища кэша с загрузкой Spring.

Что такое кэширование

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

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

Кэш Redis с Spring Boot

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

Некоторые аннотации и примеры, которые я добавляю ниже, мы можем использовать в нашем коде.

@RedisHash("student")

This annotation we add in Entity class for storing our objects into a SET,
it will create a Set with the name student.
@EnableCaching

It enables the spring framework annotation-driven cache management ability.
Need to add it at the class level into the class where we are adding caching 
annotations.
@CachePut(value = "student", key = "#student.id")
@PutMapping
public void updateStudent(@RequestBody Student student) {
    studentService.updateStudent(student);
}

This is for the update method whenever a particular Id is getting updated
the cached content will also be updated for that id. 
//whose age greater than 22 don't cache them
@Cacheable(value = "student", key = "#id", unless = "#result.age > 22")
@GetMapping("/{id}")
public Student getStudentById(@PathVariable("id") long id) {
    return studentService.getStudentById(id);
}

This method cache the get method response, the first time it will get the data from
DB, next time it will return from the cache. Here unless is used for 
adding a condition.
@CacheEvict(value = "student", allEntries = true)
@DeleteMapping("/{id}")
public void deleteStudent(@PathVariable("id") long id) {
    studentService.deleteStudent(id);
}

This is a delete method, CacheEvict annotation is used for removing the record 
from the cache, whenever we delete the records from the database. It will keep
the cache updated.

В приведенных выше аннотациях мы передали value = «student», так что здесь student — это имя нашего хеш-ключа, которое мы передали в аннотации RedisHash .

Мы можем проверить записи с помощью Postman. Я буду загружать видео в ближайшее время.

После настройки проекта Spring Boot мы можем добавить вышеуказанные аннотации либо на уровень службы, либо на уровень контроллера, в любом месте.

В методе POST я не добавлял аннотации, потому что это полезно, если только сразу после сохранения нам нужны данные в методе GET, иначе кэшировать их будет нехорошо.

Если мы получаем ошибки, связанные с кешем, некоторые распространенные ошибки, с которыми я столкнулся, заключались в том, что либо мы не реализовали Serializable в классе сущностей, либо мы передаем неправильные ключи в аннотациях.

Если вы все еще сталкиваетесь с ошибками, вы можете обратиться ко мне. В следующем посте мы увидим, как мы можем использовать Redis в качестве модели Pub/Sub.

Спасибо за прочтение!!

Счастливого обучения!!