Coding With Fun
Home Docker Django Node.js Articles Python pip guide FAQ Policy

Spring Boot 2.x Basic Tutorial: Use centralized cache Redis


Jun 01, 2021 Article blog


Table of contents


In this article, let's learn how to implement data caching using Redis in Spring Boot cache support.

(Recommended tutorial: Spring Boot those things.) )

Give it a try

The definition of a User entity

@Entity @Data @NoArgsConstructor public class User implements Serializable {


    @Id
    @GeneratedValue
    private Long id;


    private String name;
    private Integer age;


    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

Data access implementation for User entities (covering cache annotations)

@CacheConfig(cacheNames = "users") public interface UserRepository extends JpaRepository<User, Long> {


    @Cacheable
    User findByName(String name);


}

(Recommended course: Spring tutorial)

Here's how to start remodeling the project:

Step 1: Add dependencies pom.xml

lt; d ependency& lt; g roupId&org.springframework.boot</groupId& lt; artifactId&spring-boot-starter-data-redis</artifactId& lt;/dependency&


<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

In earlier versions of Spring Boot 1.x the dependency was named spring-boot-starter-redis so it's different from this in the Spring Boot 1.x foundation tutorial.

Step 2: Add configuration information to the configuration file, for example, for local operations, such as:

spring.redis.host=localhost spring.redis.port=6379 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.shutdown-timeout=100ms

Regarding the configuration of the connection pool, it is important to note that:

Redis connection pool configuration is different from Spring Boot 2.x in version 1.x with the prefix spring.redis.pool jedis is used as the connection pool in version 1.x and lettuce is used as the default for configurations above the connection pool in version 2.x, and production actually needs to be further modified according to deployment and business requirements.

Try unit tests again:

@Slf4j @RunWith(SpringRunner.class) @SpringBootTest public class Chapter54ApplicationTests {


    @Autowired
    private UserRepository userRepository;


    @Autowired
    private CacheManager cacheManager;


    @Test
    public void test() throws Exception {
        System.out.println("CacheManager type : " + cacheManager.getClass());


        // 创建1条记录
        userRepository.save(new User("AAA", 10));


        User u1 = userRepository.findByName("AAA");
        System.out.println("第一次查询:" + u1.getAge());


        User u2 = userRepository.findByName("AAA");
        System.out.println("第二次查询:" + u2.getAge());
    }


}

By performing the test output, you can get:

CacheManager type : class org.springframework.data.redis.cache.RedisCacheManager Hibernate: select next_val as id_val from hibernate_sequence for update Hibernate: update hibernate_sequence set next_val= ? w here next val=? H ibernate: insert into user (age, name, id) values (?, ?, ?) 2020-08-12 16:25:26.954 INFO 68282 --- [ main] io.lettuce.core.EpollProvider : Starting without optional epoll library 2020-08-12 16:25:26.955 INFO 68282 --- [ main] io.lettuce.core.KqueueProvider : Starting without optional kqueue library Hibernate: select user0 .id as id1 0 , user0_.age as age2 0 /b12>, user0_.name as name3 0 from user user0 where user0 .name=? First query: 10 Second query: 10

(Recommended micro-class: Spring micro-class.) )

You can see:

  1. The CacheManager type output in the first row is org.springframework.data.redis.cache.RedisCacheManager instead of EhCacheCacheManager in the previous article
  2. On the second query, there is no output SQL statement, so it is taken to get the cache

Here's a basic tutorial on Spring Boot 2.x: Using centralized cache Redis which I hope will help you.