Jun 01, 2021 Article blog
In this article, let's learn how to implement data caching using
Redis
in
Spring Boot
cache support.
(Recommended tutorial: Spring Boot those things.) )
@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<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:
CacheManager type
output in the first row is
org.springframework.data.redis.cache.RedisCacheManager
instead of
EhCacheCacheManager
in the previous article
Here's a basic tutorial on Spring Boot 2.x: Using centralized cache
Redis
which I hope will help you.