달성 -java에 대한 분산 잠금 레디 스

패키지 com.sea.report.forms.product.config.redis, 

가져 오기 redis.clients.jedis.Jedis,
 가져 오기 redis.clients.jedis.params.SetParams, 

가져 오기 Collections의; 

/ ** 
 * @Classname RedisLockUtil 
 * : @description 적어도 우리는 네 가지 조건을 충족하는지 확인하려면 
 * 1. 상호 배타적 : 단 하나의 클라이언트가 잠금 보유 할 수 주어진 시간에 
 클라이언트 지원이있는 경우에도 : 일어나지 않을 것입니다 * 2. 교착 상태 활성 붕괴 잠금 해제,하지만 다른 후속 동안 잠금 확인하기 위해 
 잠글 수 있습니다 * 클라이언트를 
 허용 3.에게 * 오류를 : 노드 레디 스 정상 작동의 대부분은, 클라이언트가 잠그고 잠금을 해제 할 수있는 한 
 * 4. 잠금 장치를 와 클라이언트로 잠금을 해제해야합니다 
 * @date 2019년 8월 13일 14시 10분 
 caibixiang에 의해 @Created * 
 * / 
공용  클래스 RedisLockUtil {
     공공  정적  최종 문자열 LOCK_SUCCESS = "확인";
     개인  정적  최종 긴 RELEASE_SUCCESS = 1L ; 

    / ** 
     * @param의 lockKey 잠금 
     * @param RequestID가 요청 식별자 
     * @param expireTime 만료 시간 
     *을 @return 인수 성공 여부
      * / 
    공공  정적  부울 설정된 tryLock (lockKey 문자열, 문자열 RequestID가, INT expireTime ) { 
        jedis jedis = RedisClient.getJedisPoool ()은의 getResource (); 
        setParams를 가진 setParams = SetParams.setParams () PX (expireTime) .nx (). 
        문자열 결과 =jedis.set (lockKey, RequestID가, setParams);
        경우 (LOCK_SUCCESS.equals (결과))
             반환  사실 ;
        돌아  거짓 ; 
    } 


    / ** 
     *用루아脚本保证一致性
     * @param lockKey 
     * @param RequestID가 
     * @return 
     * / 
    공공  정적  부울 releaseLock (문자열 lockKey, 문자열 RequestID가) { 
        문자열 스크립트 = "만약 redis.call ( '수', KEYS [1]) ARGV [1] 다음에, "델"(redis.call 반환 == KEYS [1]), 그렇지 단부 0 " ; 
        Jedis jedis =. RedisClient.getJedisPoool ()의 getResource (); 
        개체 결과 = jedis.eval (스크립트, Collections.singletonList (lockKey), Collections.singletonList (RequestID가))
         경우 (RELEASE_SUCCESS.equals (결과))
             반환  사실 ;
        돌아  거짓 ; 
    } 


}
패키지 com.sea.report.forms.product.config.redis; 

수입 com.sea.report.forms.product.dto.PersonDto;
수입 com.sea.report.forms.product.util.MapToObject;
수입 org.springframework.stereotype.Component;
수입 redis.clients.jedis.Jedis;
수입 redis.clients.jedis.JedisPool;
수입 redis.clients.jedis.JedisPoolConfig; 

수입 java.util.Map; 

/ ** 
 * @Classname RedisClient 
 * @description 클라이언트 jedis 
 * @date 2019년 8월 11일 11시 18분 
 * caibixiang에 의해 @Created 
 * / 
@Component 
공공  클래스 RedisClient { 
    

    공개 정적 JedisPool getJedisPoool () { 
        JedisPoolConfig jedisPoolConfig = 새로운 JedisPoolConfig (); 
        jedisPoolConfig.setMaxTotal ( 10 ); 
        jedisPoolConfig.setMaxIdle ( 10 ); 
        jedisPoolConfig.setMinIdle ( 10 ); 
        jedisPoolConfig.setMaxWaitMillis ( 1000 ); 
        JedisPool jedisPool = 새로운 JedisPool (jedisPoolConfig, "IP", 6379 );
        반환 jedisPool을; 
    } 


}

 

추천

출처www.cnblogs.com/caibixiang123/p/11347159.html