下面我将详细讲解“Spring Boot Cache使用方法整合代码实例”的完整攻略。
一、什么是Spring Boot Cache
Spring Boot Cache是Spring Boot中的缓存框架,它提供了一种简单的方式来缓存数据的读取结果,从而减少不必要的计算并提升应用程序的性能。
二、Spring Boot Cache使用方法
1. 引入依赖
在Spring Boot中使用Cache,需要在pom.xml中引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- 如果需要使用Redis等分布式缓存,则需要引入以下依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置缓存
在application.properties文件中添加以下配置:
# 配置缓存类型,默认为简单的内存缓存
spring.cache.type=simple
# 如果使用Redis等分布式缓存,则可以配置为redis
# spring.cache.type=redis
# 配置缓存的过期时间
spring.cache.cacheManager.config.defaultExpiration=180
3. 编写业务逻辑
在业务逻辑中添加@Cacheable
注解来指定方法的返回结果需要被缓存,并指定缓存的名称。
@Service
public class UserServiceImpl implements UserService {
private final static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private UserRepository userRepository;
@Override
@Cacheable(value = "getUserById", key = "#userId")
public User getUserById(String userId) {
logger.info("Going to get user by id: {}", userId);
Optional<User> optionalUser = userRepository.findById(userId);
if (optionalUser.isPresent()) {
return optionalUser.get();
} else {
throw new UserNotFoundException(userId);
}
}
@Override
@CachePut(value = "getUserById", key = "#user.userId")
public User saveUser(User user) {
User savedUser = userRepository.save(user);
logger.info("User saved successfully: {}", savedUser);
return savedUser;
}
@Override
@CacheEvict(value = "getUserById", key = "#userId")
public void deleteUserById(String userId) {
logger.info("Going to delete user by id: {}", userId);
userRepository.deleteById(userId);
}
}
4. 测试缓存
下面以两个示例来说明Spring Boot Cache的使用方法:
示例一:测试缓存读取
在UserController
类中,添加以下代码:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{userId}")
public User getUserById(@PathVariable String userId) {
logger.info("Going to get user by id: {}", userId);
return userService.getUserById(userId);
}
}
启动应用后,可以通过访问http://localhost:8080/users/1
来获取id为1的用户信息。
首次访问时,可以看到控制台输出的日志:
Going to get user by id: 1
此时缓存为未命中,控制台输出的日志表示从数据库读取数据。
再次访问时,可以看到控制台输出的日志:
Going to get user by id: 1
此时缓存命中,控制台输出的日志表示从缓存中读取数据。
示例二:测试缓存更新
在UserController
类中,添加以下代码:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("")
public User saveUser(@RequestBody User user) {
logger.info("Going to save user: {}", user);
return userService.saveUser(user);
}
@DeleteMapping("/{userId}")
public void deleteUserById(@PathVariable String userId) {
logger.info("Going to delete user by id: {}", userId);
userService.deleteUserById(userId);
}
}
启动应用后,可以通过访问http://localhost:8080/users
来创建新的用户信息。
首次访问时,可以看到控制台输出的日志:
Going to save user: User(userId=null, name=张三, age=18, gender=male)
此时缓存未命中,用户信息被保存到数据库中。
再次访问时,可以看到控制台输出的日志:
Going to get user by id: b9c22cea-4d7c-42c5-9f16-53828a9c3e3d
此时缓存命中,控制台输出的日志表示从缓存中读取数据。
当更新用户信息时,可以通过访问http://localhost:8080/users/2
来删除id为2的用户信息。如下:
$ curl -X DELETE http://localhost:8080/users/2
此时可以看到控制台输出的日志:
Going to delete user by id: 2
缓存的数据被删除,从此之后再次访问id为2的用户信息时,缓存将再次命中并将再次从数据库中读取数据。
三、总结
通过以上示例,我们可以看到Spring Boot Cache的使用方法,包括引入依赖、配置缓存、编写业务逻辑等。Spring Boot Cache可以提高应用程序的性能,并且还能够使用缓存的读取结果来减少不必要的计算,从而提升程序的效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot Cache使用方法整合代码实例 - Python技术站