Spring Cache는 Annotation 기반 캐싱 기능을 구현한 프레임워크입니다. 간단히 Annotation만 추가하면 캐싱 기능을 구현할 수 있습니다.
Spring 캐시는 추상화 계층을 제공하며 맨 아래 계층은 다른 캐시 구현을 전환할 수 있습니다.
구체적으로, 다양한 캐싱 기술이 CacheManager 인터페이스를 통해 통합됩니다.
CacheManager는 Spring에서 제공하는 다양한 캐싱 기술에 대한 추상 인터페이스입니다. 이는 기본 캐싱 기술이며 Map에 캐시됩니다. 이는 서비스가 중단되면 캐시된 데이터가 사라짐을 의미합니다.
다른 캐싱 기술에 대해 다른 CacheManager를 구현해야 함
CacheManager | Description |
---|---|
EhCacheCacheManager | EhCache를 캐싱 기술로 사용 |
Gu avaCache Manager | Google의 GuavaCache를 캐싱 기술로 사용 |
RedisCacheManager | Redis를 캐싱 기술로 사용 |
Spring Boot 프로젝트에서 캐싱 기술을 사용하려면 해당 캐싱 기술의 종속성 패키지를 프로젝트로 가져오고 스타트업 수업에 활용해보세요@EnableCaching
캐싱 지원만 켜두시면 됩니다. 예를 들어 Redis를 캐싱 기술로 사용하려면 Spring 데이터 Redis의 Maven 좌표만 가져오면 됩니다. 일반적으로 사용되는 주석은 다음과 같습니다.
참고 | @@ENableCaching |
---|---|
@cacheable | 데이터가 있으면 캐시된 데이터를 직접 반환합니다. 데이터가 없으면 메서드를 호출하고 메서드 반환 값을 캐시에 넣습니다 |
@CachePut | 메서드의 반환 값을 캐시에 넣습니다 |
@CacheEvict | 캐시에서 하나 이상의 데이터 조각을 삭제합니다. |
2.1, @EnableCaching이 주석의 주요 기능은 캐시 주석 기능을 활성화하고 다른 Spring Cache 주석을 적용하는 것입니다. 사용법도 매우 간단합니다. 프로젝트의 시작 클래스 바로 위에 추가하면 됩니다. @Slf4j @SpringBootApplication @EnableCaching public class CacheDemoApplication { public static void main(String[] args) { SpringApplication.run(CacheDemoApplication.class, args); log.info("项目启动成功..."); } } 2.2, @Cacheable
注解中的参数传递主要使用的是**SpEL(Spring Expression Language)**对数据进行获取传递,这有点类似于JSP中的EL表达式,常用方式如下几种:
来自Spring Cache源码:Spring Expression Language (SpEL) expression used for making the method 在
/** * @description 通过id获取用户信息 * @author xBaozi * @date 14:23 2022/7/3 **/ @Cacheable(value = "userCache", key = "#id", unless = "#result == null") @GetMapping("/{id}") public User getById(@PathVariable Long id) { User user = userService.getById(id); return user; } 2.3、@CachePut
/** * @description 新增用户信息并返回保存的信息 * @author xBaozi * @date 14:38 2022/7/3 **/ @CachePut(value = "userCache", key = "#user.id") @PostMapping public User save(User user) { userService.save(user); return user; } 2.4、@CacheEvict
/** * @description 更新用户信息 * @author xBaozi * @date 14:41 2022/7/3 **/ @CacheEvict(value = "userCache", key = "#result.id") @PutMapping public User update(User user) { userService.updateById(user); return user; } 3、使用Redis当作缓存产品因为 Spring 默认的缓存技术无法持久化保存缓存数据,即服务挂了缓存也挂了,因此就需要使用Redis进行操作(其实也是因为学习了Redis) 前面的SpringBoot整合Redis缓存验证码里面有记录着一些Redis的基本操作。 3.1、坐标导入导入 maven 坐标:spring-boot-starter-data-redis、spring-boot-starter-cache <!--Spring Data Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--Spring Cache--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> 3.2、yml配置
3.3、开启注解功能在启动类 @Cacheable 주석에는 일반적으로 사용되는 여러 속성이 있습니다. 속성 설정: 🎜
@Slf4j @SpringBootApplication @ServletComponentScan @EnableCaching public class ReggieApplication { public static void main(String[] args) { SpringApplication.run(ReggieApplication.class, args); log.info("springBoot项目启动成功……"); } }🎜2.3, @CachePut🎜🎜 @CachPut 주석은 주로 반환 값을 반환합니다. 메소드의 캐시에 넣습니다. 여기서 SpEL은 일반적으로 사용되는 속성은 다음과 같습니다. 🎜
/** * @description 新增套餐信息 * @author xBaozi * @date 17:55 2022/5/13 * @param setmealDto 需要新增套餐的数据 **/ @CacheEvict(value = "setmealCache",allEntries = true) @PostMapping public Result<String> save(@RequestBody SetmealDto setmealDto) { log.info("套餐信息为{}", setmealDto); setmealService.saveWithDish(setmealDto); return Result.success("套餐" + setmealDto.getName() + "新增成功"); }🎜2.4, @CacheEvict🎜🎜 @CacheeEvict 는 주로 하나 이상의 조각을 캐시합니다. of data 캐시에서 삭제하고 SpEL을 사용하여 데이터를 얻습니다. 일반적으로 사용되는 속성은 다음과 같습니다. 🎜
/** * @description 更新套餐信息并更新其关联的菜品 * @author xBaozi * @date 11:28 2022/5/14 * @param setmealDto 需要更新的套餐信息 **/ @CacheEvict(value = "setmealCache",allEntries = true) @PutMapping public Result<String> updateWithDish(@RequestBody SetmealDto setmealDto) { log.info(setmealDto.toString()); setmealService.updateWithDish(setmealDto); return Result.success("套餐修改成功"); } 3. Redis를 캐싱 제품으로 사용🎜Spring의 기본 캐싱 기술은 다음과 같습니다. 내구성이 없음 캐시 데이터는 자동으로 저장됩니다. 즉, 서비스가 중단되면 캐시도 중단되므로 Redis를 사용하여 작업해야 합니다(사실 Redis를 배웠기 때문이기도 합니다) 🎜🎜이전 SpringBoot 통합 Redis 캐시 확인 코드는 Redis의 일부 기본 작업을 기록합니다. 🎜🎜3.1, 좌표 가져오기🎜🎜Maven 좌표 가져오기: spring-boot-starter-data-redis, spring-boot-starter-cache🎜rrreee🎜3.2, yml 구성🎜🎜spring:🎜3.3. 주석 기능을 활성화하세요🎜🎜캐시 주석 기능을 활성화하려면 시작 클래스 com/itheima/CacheDemoApplication.java 에 @EnableCaching 주석을 추가하세요🎜 rrreee🎜3.4. @Cacheable🎜🎜을 사용하세요. 캐시를 사용할 때 반환 값은 직렬화 가능 직렬화 인터페이스를 구현해야 한다는 점을 기억해야 합니다. 그렇지 않으면 오류가 발생합니다. 🎜🎜NoSql 데이터베이스에는 Java 기본 유형에 해당하는 데이터 구조가 없기 때문에 NoSql 데이터베이스에 저장할 때 객체를 직렬화해야 하며 동시에 네트워크 중에 두 가지에 주의해야 합니다. 각 애플리케이션의 javabeans의 serialVersionUID가 일관되어야 합니다. 그렇지 않으면 deserialization이 정상적으로 수행될 수 없습니다. 🎜rrreee🎜3.5, @CacheEvict🎜🎜 사용 새 속성은 allEntries라고 하며, 이는 캐시의 모든 요소를 지워야 하는지 여부를 나타내는 데 사용되는 부울 유형입니다. 기본값은 false이며 이는 필요하지 않음을 의미합니다. allEntries가 true로 설정되면 Spring Cache는 지정된 키를 고려하지 않습니다. 때로는 요소를 하나씩 지우는 것보다 모든 요소를 한 번에 지우고 캐시하는 것이 더 효율적일 때도 있습니다. 🎜/** * @description 更新套餐信息并更新其关联的菜品 * @author xBaozi * @date 11:28 2022/5/14 * @param setmealDto 需要更新的套餐信息 **/ @CacheEvict(value = "setmealCache",allEntries = true) @PutMapping public Result<String> updateWithDish(@RequestBody SetmealDto setmealDto) { log.info(setmealDto.toString()); setmealService.updateWithDish(setmealDto); return Result.success("套餐修改成功"); } 4、测试代码编写完成之后,重启工程,然后访问后台管理系统,对套餐数据进行新增以及删除,而后观察Redis中的数据发现写的代码是能正常跑到!成功! |
위 내용은 SpringBoot가 Spring Cache를 통합하여 Redis 캐싱을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!