Home  >  Article  >  Database  >  How to use centralized cache Redis in Spring Boot

How to use centralized cache Redis in Spring Boot

PHPz
PHPzforward
2023-05-26 10:49:051462browse

Try it yourself

Definition of 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;
    }
}

User entity data access implementation (covers cache annotations)

@CacheConfig(cacheNames = "users") public interface UserRepository extends JpaRepository {

@Cacheable
    User findByName(String name);


}

(Recommended course: Spring tutorial)

Let’s start transforming this project:

First step: Add related dependencies in pom.xml:

org.springframework.boot spring-boot-starter-data-redis

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

In earlier versions of Spring Boot 1.x, the name of this dependency was spring-boot-starter-redis, so in Spring Boot 1.xThe basic tutorial is different from here.

Step 2: Add configuration information to the configuration file, take local operation as an example, for example:

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, please note:

The connection pool configuration of Redis is prefixed in version 1.x is spring.redis.pool is different from Spring Boot 2.x. In version 1.x, jedis is used as the connection pool, while in version 2.x, lettuce is used as the connection pool. The above configurations are all default values. In fact, production needs to be further based on Make appropriate modifications to the deployment situation and business requirements.

Let’s try the unit test 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());
    }


}

Execute the test output to 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= ? where nextval=? Hibernate: 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 id10, user0_.age as age20, user0_.name as name30 from user user0 where user0.name=? First query: 10 Second query: 10

(Recommended micro class: Spring micro class)

You can see:

  1. The first line of output CacheManager type is org.springframework.data.redis.cache.RedisCacheManager instead of EhCacheCacheManager in the previous article

  2. During the second query, no SQL statement was output, so the cache was used to obtain it

The above is the detailed content of How to use centralized cache Redis in Spring Boot. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete