[SpringBoot] 캐시 관련 댓글

1. @EnableCaching: 주석 기반 캐싱 지원을 활성화하는 데 주로 사용되며 Application 클래스에서 사용됨

@EnableCaching //SpringBoot开启缓存注解支持
@SpringBootApplication
public class DemoApplication {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext app = SpringApplication.run(DemoApplication.class, args);
}

2. @CacheConfig: 이 주석은 캐시의 공개 구성을 추출하기 위해 클래스에 추가됩니다.

클래스 헤더에 @CacheConfig 주석을 추가하는 것은 각 메소드의 캐시 주석에 cacherName 또는 value로 지정된 구성 요소를 추가하는 것과 동일하며 이 구성 요소는 @Cacheable 및 @를 사용하는 모든 관리 클래스를 조정하는 데 사용되는 @CacheConfig에서 가져옵니다. CachePut ... 및 @CacheEvict 주석 주석 메서드의 공용 속성 , 이러한 공용 속성에는 cacheNames, keyGenerator, cacheManager 및 cacheResolver가 포함됩니다.

  @CaaheConfig.(caaheNames - "comment")service
        public class CommsntService {
    
    
            @Autowired
            private CommentRepository commentRepository;
            public Comment findById(int comment. id){
    
    
            Comment comment = commentRepository.findById(commenc..id).get ();
            return comment; 
        }
    }

위의 코드에서 @CacheConfig 주석은 CommentService 클래스에 표시하고, cacheNames.attribute는 캐시 공간을 주석으로 설정하는 데 사용되므로 이 클래스의 모든 메서드에서 캐시 주석을 사용할 때 해당 cacheNames 속성을 생략할 수 있습니다. .
클래스에서 @CacheConfig를 사용하는 경우 어노테이션은 특정 속성(예: cacheNames)을 정의함과 동시에 캐시 어노테이션을 사용하여 클래스 메서드에 동일한 속성을 정의한 다음 속성 값을 정의합니다. "근접성 원칙"을 사용하여 선택은 메소드의 주석에 있는 속성 값에 따릅니다.

3. @CachePut: 이 주석은 캐시를 설정하는 데 사용됩니다.

메소드 호출 시 캐시가 갱신됨을 나타내며 기본적으로 대상 메소드를 먼저 호출한 후 대상 메소드의 실행 결과를 캐시에 저장합니다. , 이 주석에 사용된 키는 캐시와 동일해야 하며 키는 동일하게 유지됩니다.
@cacheable과의 차이점은 @cacheable이 대상 메소드보다 먼저 실행되지만 대상 메소드의 결과를 먼저 가져와야 하기 때문에 대상 메소드 이후에 실행된다는 것입니다. @Cacheable은 #result를 사용할 수 없다. @Cacheable로 표시된 메소드는 호출되지 않을 수 있고 결과를 얻을 수 없기 때문이다. @cacheable과 기본적으로 동일하지만 비동기(동기화)인지 속성이 다르다.

@CachePut(value="dep",key="#department.id")
    public Department updateDepartment(Department department){
    
    
       System.out.println("更新信息:"+department);
       departmentDao.updateDepartment(department);
       return department;
    }

4. @Cacheable(value=”accountCache"): 이 주석은 주로 메서드 구성을 위한 것으로 메서드의 요청 매개 변수에 따라 결과를 캐시할 수 있습니다. 예를 들어 값이 캐시에 존재하는 경우 캐시된 데이터는 캐시에 없으면 캐시에 저장됩니다.

이 주석은 이 메서드가 호출되면 accountCache라는 캐시에서 쿼리한다는 의미이며 그렇지 않으면 실제 메서드(즉, 데이터베이스 쿼리)가 실행되고 실행 결과가 캐시에 저장됩니다 . 그것은 캐시에 있는 객체로 반환될 것입니다 . 여기서 캐시의 키는 매개변수 userName이고 값은 계정 개체입니다. "accountCache" 캐시는 spring*.xml에 정의된 이름입니다.
속성:

  1. value/cacheNames: 캐시 공간의 이름을 지정하고 속성을 일치시킵니다. 둘 중 하나를 선택할 수 있습니다.
  2. 키: 캐시에 있는 데이터의 키를 지정하며 메소드 파라미터 값이 기본으로 사용되며 SPEL 표현식도 사용할 수 있습니다.
  3. keyGenerator: 키 속성과 함께 사용할 수 있는 캐시된 데이터의 키에 대한 생성기를 지정합니다.
  4. cacheManager: 캐시 관리자를 지정합니다.
  5. cacheResolver: cacheManager 특성과 함께 사용할 수 있는 캐시 확인자를 지정합니다.
  6. 조건: 특정 조건이 충족되면 데이터 캐싱을 수행하도록 지정합니다.
  7. 않는 한: 특정 조건이 충족되면 데이터를 캐시하지 않도록 지정합니다.
  8. sync: 비동기 캐싱을 사용할지 여부를 지정합니다. 기본값은 false입니다.

5. @CacheEvict: 이 주석은 캐시를 정리하는 데 사용됩니다.

캐시를 지우는 방법을 표시하는 주석을 달고 먼저 메서드 호출을 수행한 다음 캐시를 지웁니다.
@CacheEvict(value=”accountCache”, key=”#account.getName()”) 중 캐시의 키를 지정하기 위해 사용하는 Key는 account 객체의 name 필드를 사용하므로 주의한다. 를 저장할 때 매개변수 계정 개체에서 name의 값도 키로 얻어야 ​​하는데 앞의 #은 SpEL 표현식이라는 뜻이고 이 표현식은 메서드의 매개변수 개체를 통과할 수 있다.
allEntries 속성
: 지정된 캐시의 모든 키-값 쌍을 지울지 여부, 즉 모든 캐시를 지울지 여부를 나타내며 true로 설정하면 캐시의 모든 키-값 쌍이 지워집니다. 기본값은 false입니다. 즉, 키에 따라 캐시를 지웁니다. 따라서 key 속성과 함께 사용할 수 있습니다.
beforeInvocation 속성: @CacheEvict-annotated 메소드 호출 전에 지정된 캐시를 지울지 여부를 나타내며, 기본값은 false, 즉 메소드 호출 후 캐시를 지우며, true로 설정하면 메소드 호출 전에 캐시를 지운다. . 메소드 호출 전 캐시 지우기와 메소드 호출 후 캐시 지우기의 차이는 메소드 호출 시 예외가 발생하는지 여부로, 예외가 없으면 두 설정의 차이가 없으며, 예외가 발생하면 캐시를 지우도록 설정 메서드 호출이 실패했기 때문에 메서드 호출 후 캐시가 작동하지 않습니다.

@CacheEvict(value = "dep",key = "#id"/*,beforeInvocation = true*//*,allEntries = true*/)
    public boolean delDep(int id){
    
    
        boolean flag=false;
        try{
    
    
            departmentDao.deleteDepartmentById(id);
            flag=true;
        }catch(Exception e){
    
    
            e.printStackTrace();
        }
        return flag;
}

6. @Caching: 이 주석은 캐시 청소, 설정 및 기타 작업을 패키징할 수 있습니다.

클래스나 메서드에 적용할 수 있는 복잡한 규칙에 대한 데이터 캐시 관리에 사용되며 @Caching 주석에는 @Cacheable, @CachePut 및 @CacheEvict의 세 가지 주석에 해당하는 Cacheable, Put 및 Evict의 세 가지 속성이 포함됩니다. 각기

@Caching(cacheable={
    
    8cacheable (gacheNames ="comment".,key = "帮id")},
put = {
    
    RCachePut(cacheNames = "comment".,key.= "#result.author")})
public Comment getcoiment(int comment id){
    
    
    return commentRepository.fi.ndByld(comment id).get(); 
}

위의 코드에서 @Cacheable과 @CachePut 두 개의 어노테이션은 cacheable과 put 속성을 사용하여 중첩되고 각각 id와 author는 캐시 키 값으로 사용되며 쿼리 결과 Comment는 캐시 값으로 사용되어 캐시 관리가 가능합니다.

추천

출처blog.csdn.net/m0_46459413/article/details/129934944