An application without cache is typically slow. Even great code will crawl when handling heavy traffic without cache. Caching can be a fast and relatively cheap way to increase performance.
Caching is a performance boost strategy you must implement into your application. Caching is nothing more than a hash table.
For Redis, all Redis data resides in-memory, in contrast to databases that store data on disk or SSDs. By eliminating the need to access disks, in-memory data stores such as Redis avoid seek time delays and can access data in microseconds. Redis features versatile data structures, high availability, geospatial, Lua scripting, transactions, on-disk persistence, and cluster support making it simpler to build real-time internet-scale apps.
I am going to show you how to implement caching into your Spring Boot application.
1. Include the following dependencies in your pom file.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
In your application.properties file, set Redis configurations. Also set spring.cache.type=redis.
2. Create a configuration class
@Configuration @EnableCaching public class CachingConfig{ @Bean("customKeyGenerator") public KeyGenerator keyGenerator() { return new CustomKeyGenerator(); } private class CustomKeyGenerator implements KeyGenerator { public Object generate(Object target, Method method, Object... params) { StringBuilder strParams = new StringBuilder(target.getClass().getSimpleName()); strParams.append("_"); strParams.append(method.getName()); for(Object param: params) { strParams.append("_"); strParams.append(param); } System.out.println("key="+strParams.toString()); return strParams.toString(); } } }
3. Use @Cacheable to retrieve data
@Cacheable(value="users", key = "#id") public User getById(Long id) { // retrieve User from db ... return user; }
4. Use @CachePut to update cached data
@CachePut(value="users", key = "#user.id") public User update(User user) { .... return user; }
5. Use @CacheEvict to delete cached data
@CacheEvict(value="users", key = "#id") public Boolean delete(Long id) { .... return true; }