@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; } }
@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
:
<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.x
The 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:
The first line of output CacheManager type
is org.springframework.data.redis.cache.RedisCacheManager
instead of EhCacheCacheManager
in the previous article
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!