>  기사  >  데이터 베이스  >  캐싱 메커니즘을 구현하기 위한 Spring Redis 주석 정보

캐싱 메커니즘을 구현하기 위한 Spring Redis 주석 정보

藏色散人
藏色散人앞으로
2020-11-02 14:08:192132검색

Redis Tutorial 칼럼에서는 Spring Redis 주석으로 구현된 캐싱 메커니즘을 소개할 예정입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

1.xml 구성

 <bean id="poolConfigTax" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="${redis_tax.maxIdle}" />  
        <property name="minIdle" value="${redis_tax.minIdle}" />  
        <property name="maxTotal" value="${redis_tax.maxTotal}" />
        <property name="testOnBorrow" value="${redis_tax.testOnBorrow}" />  
    </bean>  
    <!-- Tax redis 数据库  -->
    <bean id="connectionFactoryTax" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"   
        p:host-name="${redis_tax.host}" p:port="${redis_tax.port}" p:password="${redis_tax.pass}"  p:pool-config-ref="poolConfigTax"
        p:database="0"/>  
    <!--redis操作模版,使用该对象可以操作redis  -->  
    <bean id="redisTemplateTax" class="org.springframework.data.redis.core.RedisTemplate" >    
        <property name="connectionFactory" ref="connectionFactoryTax" />    
        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can&#39;t cast to String!!  -->    
        <property name="keySerializer" >    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />    
        </property>    
        <property name="valueSerializer" >    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />    
        </property>    
        <property name="hashKeySerializer">    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    
        </property>    
        <property name="hashValueSerializer">    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>    
        </property>    
        <!--开启事务  -->  
        <property name="enableTransactionSupport" value="false"></property>  
    </bean>   
    <!-- 配置RedisCacheManager -->
    <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
        <constructor-arg name="redisOperations" ref="redisTemplateTax" />
    </bean>
    <cache:annotation-driven cache-manager="redisCacheManager"/>

2. @Cacheable, @CacheEvict, @CachePut에 대한 자세한 설명
1. 어디에 사용되나요? 메서드나 클래스에 사용됩니다.
2. 이 두 가지 사용법의 차이점은 무엇인가요?
메소드에 사용됨: 이 메소드의 반환 값이 캐시됨
클래스에 사용됨: 클래스의 모든 메소드가 이 주석을 지원함
3. 사용 후 결과는 무엇입니까? 다음에 이 메소드가 동일한 메소드 및 매개변수로 호출되면 메소드를 다시 실행할 필요 없이 캐시에서 직접 값을 가져옵니다.
4. 반환값은 캐시에 어떻게 저장되나요? 키-값 쌍의 형태로 캐시에 저장됩니다. 값은 기본 전략과 사용자 정의 전략의 두 가지 전략으로 생성됩니다.
기본 전략: 값 값 뒤에 이중 "::" 접합, 형식 매개변수 목록, 형식 매개변수가 객체인 경우 json 형식 사용:

@CacheConfig(cacheNames="enterprise")//<!-- 声明缓存使用的缓存名称 -->
public interface EnterpriseRepo extends JpaRepository<Enterprise, Integer>,JpaSpecificationExecutor<Enterprise>{
    @Cacheable(value="cash1")
    Enterprise findByid(Integer id);

    @CachePut(value="cash1")
    Enterprise save(Enterprise enterprise);

}

사용자 정의 전략: key 속성은 Spring의 반환 결과를 지정하는 데 사용됩니다. 캐시 방법 해당 키입니다. 이 속성은 SpringEL 표현식을 지원합니다. 이 속성을 지정하지 않으면 Spring은 기본 전략을 사용하여 키를 생성합니다.

사용자 정의 전략은 Spring의 EL 표현식을 통해 키를 지정할 수 있음을 의미합니다. 여기의 EL 표현식은 메소드 매개변수와 해당 속성을 사용할 수 있습니다. 메소드 매개변수를 사용할 때 "#매개변수 이름" 또는 "#p매개변수 인덱스"를 직접 사용할 수 있습니다. 다음은 매개변수를 키로 사용하는 몇 가지 예입니다.

@Cacheable(value="users", key="#id")

   public User find(Integer id) {
      return null;
   }

   @Cacheable(value="users", key="#p0")
   public User find(Integer id) {
      return null;
   }

   @Cacheable(value="users", key="#user.id")
   public User find(User user) {
      return null;
   }

   @Cacheable(value="users", key="#p0.id")
   public User find(User user) {
      return null;
   }

 키로 사용되는 위의 메서드 매개변수 외에도 Spring은 키를 생성하는 데 사용할 수 있는 루트 개체도 제공합니다. 이 루트 개체를 통해 다음 정보를 얻을 수 있습니다.


루트 객체의 속성을 키로 사용하려면 "#root"도 생략할 수 있습니다. Spring은 기본적으로 루트 객체의 속성을 사용하기 때문입니다. 예:

@Cacheable(value={"users", "xxx"}, key="caches[1].name")

public User find(User user) {
   return null;
}

6. 조건 속성은 발생 조건을 지정합니다

때로는 메서드의 모든 반환 결과를 캐시하고 싶지 않을 수도 있습니다. 이 기능은 조건 속성을 통해 달성될 수 있습니다. 조건 속성은 기본적으로 비어 있습니다. 이는 모든 통화 상황이 캐시된다는 의미입니다. 해당 값은 SpringEL 표현식을 통해 지정됩니다. true이면 캐싱을 의미하고, false이면 캐싱이 없음을 의미합니다. 즉, 메서드가 호출될 때마다 해당 메서드가 실행됩니다. 다음 예는 사용자 ID가 짝수인 경우에만 캐싱이 발생함을 나타냅니다.

@Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")
public User find(User user) {
   System.out.println("find user by user " + user);
   return user;
}

2. @CachePut

Spring Cache를 지원하는 환경에서 @Cacheable이라는 어노테이션이 붙은 메소드에 대해 Spring은 각 실행 전에 캐시에 동일한 키를 가진 캐시 요소가 있는지 확인합니다. 메서드를 다시 실행하지 않고 캐시에서 결과를 직접 가져와 반환합니다. 그렇지 않으면 실행되고 반환 결과가 지정된 캐시에 저장됩니다. @CachePut은 캐싱 기능을 지원하는 메서드를 선언할 수도 있습니다. @Cacheable과의 차이점은 @CachePut으로 어노테이션이 붙은 메소드는 실행 전 캐시에 이전에 실행한 결과가 있는지 확인하지 않고, 대신 매번 메소드를 실행하고 실행 결과를 키-형식으로 저장한다는 점이다. 값 쌍.

일반적으로 저장 및 업데이트 방법에 사용됩니다.


@CachePut은 클래스와 메서드에도 주석을 달 수 있습니다. @CachePut을 사용할 때 지정할 수 있는 속성은 @Cacheable과 동일합니다.

@CachePut("users")//매번 메소드가 실행되고 그 결과는 지정된 캐시에 저장됩니다

public User find(Integer id) {
      return null;
}

Three, @CacheEvict


@CacheEvict는 필요한 메소드나 메소드를 표시하는 데 사용됩니다. 캐시 요소 카테고리를 지웁니다. 클래스에 표시되면 해당 클래스의 모든 메서드 실행이 캐시 지우기 작업을 트리거한다는 의미입니다. @CacheEvict로 지정할 수 있는 속성에는 값, 키, 조건, allEntries 및 beforeInvocation이 포함됩니다. 값, 키, 조건의 의미는 @Cacheable의 해당 속성과 유사합니다. 즉, 값은 지우기 작업이 발생하는 캐시를 나타냅니다(캐시 이름에 해당). 지정하지 않으면 기본 정책에 의해 생성된 키가 조건을 나타냅니다. 청산 작업이 발생하는 곳입니다. 두 가지 새로운 속성 allEntries와 beforeInvocation을 소개하겠습니다.

1. allEntries 속성

allEntries는 캐시의 모든 요소를 ​​지워야 하는지 여부를 나타내는 부울 유형입니다. 기본값은 false이며, 이는 필요하지 않음을 의미합니다. allEntries가 true로 지정되면 Spring Cache는 지정된 키를 무시합니다. 때로는 캐시에서 모든 요소를 ​​한 번에 지워야 하는 경우가 있는데, 이는 요소를 하나씩 지우는 것보다 더 효율적입니다.

@CacheEvict(value="users", allEntries=true)
public void delete(Integer id) {
   System.out.println("delete user by id: " + id);
}

2. beforeInvocation 속성

해당 메서드가 성공적으로 실행된 후에는 기본적으로 삭제 작업이 트리거됩니다. 즉, 예외 발생으로 인해 메서드가 성공적으로 반환되지 않으면 지우기 작업이 트리거되지 않습니다. beforeInvocation을 사용하여 지우기 작업이 트리거되는 시간을 변경할 수 있습니다. 속성 값이 true라고 지정하면 Spring은 이 메서드를 호출하기 전에 캐시에서 지정된 요소를 지웁니다.

아아아아

위 내용은 캐싱 메커니즘을 구현하기 위한 Spring Redis 주석 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제