패키지 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을; } }