분포 자물쇠

1678 단어 분포 식
redition 분포 잠 금
redission 분포 자 물 쇠 는 map 와 같은 데이터 구 조 를 사 용 했 습 니 다. key 는 자물쇠 의 이름 이 고 map 의 key 클 라 이언 트, value 는 다시 들 어 오 는 개수 입 니 다.
코드 를 분석 하면 대체적으로 코드 는 RedissionLock 클래스 에 적 혀 있 습 니 다.
잠 금 추가:
//        ,       
if (redis.call('exists', KEYS[1]) == 0) 
	 map       , key    id ,value   1 ,           1
	then redis.call('hset', KEYS[1], ARGV[2], 1); 
	       ,   30 
	redis.call('pexpire', KEYS[1], ARGV[1]); return nil; end; 
	
//      ,              id  
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) 
	//        1 
	then redis.call('hincrby', KEYS[1], ARGV[2], 1); 
	redis.call('pexpire', KEYS[1], ARGV[1]); 
	  0
	return nil; end; 

//        ,    key     
return redis.call('pttl', KEYS[1]);


key1      key

argv1   key      

argv2       id,     UUID + thread_id ,UUID  redission            

잠 금 해제:

0      ,1      

//      
if (redis.call('exists', KEYS[1]) == 0) 
//        ,  1 
	then redis.call('publish', KEYS[2], ARGV[1]); return 1; end;
//          id     id ,     	
if (redis.call('hexists', KEYS[1], ARGV[3]) == 0) then return nil;end; 

//             id  ,      -1 
local counter = redis.call('hincrby', KEYS[1], ARGV[3], -1); 
//             0,         
if (counter > 0) then redis.call('pexpire', KEYS[1], ARGV[2]); return 0;
 
//            0,        
else redis.call('del', KEYS[1]); redis.call('publish', KEYS[2], ARGV[1]); return 1; end; 

//    null 
return nil;

상세 한 정 보 는 볼 수 있다. 분산 식 자물쇠
 
zookepper 분포 잠 금 실현:
상세 하 게 보다 zookeeper 분포 잠 금 실현

좋은 웹페이지 즐겨찾기