자바 결합 redis 분포 식 잠 금 실현
redis 의 분포 식 잠 금 을 이용 하여 주로 redis 의 setnx 명령 을 이용 하여 redis 문 서 를 봅 니 다. 다음 명령 이 redis 캐 시 에 데 이 터 를 추가 할 때 key 가 존재 하면 데 이 터 를 추가 하 는 데 성공 하지 못 한 것 을 알 수 있 습 니 다.존재 하지 않 으 면 성공 을 추가 할 수 있 습 니 다.다른 측면 에서 자물쇠 (Lock) 를 이해 하 는 것 은 자원 입 니 다. 특정한 시간 에 특정한 스 레 드 에 만 사용 할 수 있다 고 표시 합 니 다. 만약 에 자원 이 사용 되 었 다 면 다른 스 레 드 는 현재 스 레 드 가 자원 을 방출 한 후에 야 사용 할 수 있 습 니 다.이 측면 에서 이해 하면 현재 스 레 드 는 redis 캐 시 에 있 는 key 자원 을 가지 고 있 기 때문에 다른 스 레 드 는 현재 스 레 드 가 key 자원 을 방출 하 기 를 기 다 려 야 합 니 다. 그렇지 않 으 면 기다 릴 수 밖 에 없습니다.다음은 코드 를 붙 여 구체 적 으로 분석 해 보 겠 습 니 다.
package com.redislock;
import redis.clients.jedis.Jedis;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
/**
* redis
* Created by hadoop on 2017/3/16.
*/
public class RedisLock implements Lock{
/**jedis **/
private final Jedis jedis;
4. 567913. 여기 서 첫째, 저 는 Lock 인 터 페 이 스 를 실현 하 는 방식 으로 이 자 물 쇠 를 실현 합 니 다. 자 물 쇠 를 사용 할 때 보통 하나의 스 레 드 에 자 물 쇠 를 가지 기 때문에 자 물 쇠 는 스 레 드 자신의 내부 스 택 에 있 는 것 으로 볼 수 있 기 때문에 다 중 스 레 드 의 지 지 를 고려 하지 않 아 도 됩 니 다.중요 한 것 은 자 물 쇠 를 가 져 오 는 인터페이스 입 니 다. 자 물 쇠 를 가 져 오 는 것 은 자원 에 대한 경쟁 을 의미 합 니 다. 따라서 이 예제 에서 저 는 대상 의 자 물 쇠 를 순환 적 으로 가 져 오 려 고 합 니 다. 즉, redis 에 데 이 터 를 추가 하고 성공 하면 자 물 쇠 를 추가 하 는 데 성공 하고 성공 하지 못 하면 자 물 쇠 를 추가 하 는 데 실 패 했 습 니 다. 휴면 한 후에 자 물 쇠 를 계속 가 져 오 는 것 입 니 다.따라서 이 lock 방법 은 차단 되 어 자 물 쇠 를 얻 지 못 하면 계속 가 져 옵 니 다.new Condition 방법 이 실현 되 지 않 은 것 도 현재 의 재능 이 부족 하고 아직 사용 되 지 않 았 기 때문에 나중에 이 new Condition 방법 을 고려 할 것 입 니 다.
여기 서 두 가 지 를 말 하면 첫 번 째 는 redis key 의 시간 초과 입 니 다. 이렇게 하면 클 라 이언 트 프로그램 이 갑자기 다운 될 때 자원 이 한 동안 후에 방출 되 고 자물쇠 가 생기 지 않도록 보장 할 수 있 습 니 다.그리고 unlock () 이라는 방법 입 니 다. 자 물 쇠 를 추가 할 때 회 계 는 자 물 쇠 를 풀 어 주 는 시간 을 계산 합 니 다. 자 물 쇠 를 풀 때 현재 자물쇠 가 시간 을 초과 하 는 지, 시간 을 초과 하면 key 를 삭제 할 수 없 는 지 판단 해 야 합 니 다.그렇지 않 으 면 라인 의 안전성 을 파괴 할 것 이다.사용 하지 않 는 redis 클 라 이언 트 때문에 setnx key 값 은 안 되 지만 del 이 key 를 사용 할 수 있 습 니 다.물론 저 는 가장 간단 한 처리 입 니 다. 임계 조건 에서 도 문제 가 발생 하기 쉬 우 며 현재 생각 할 수 있 는 방법 일 뿐 입 니 다.대신 들 도 동생 들 에 게 아낌없이 가르쳐 주 셨 으 면 좋 겠 습 니 다.
두 번 째 는 인 터 럽 트 상 태 를 설명 해 야 합 니 다. 예전 에 다 중 스 레 드 가 안전하게 끝 난 모델 을 바탕 으로 여기 서 저도 로 고 량 인 터 럽 트 를 설정 하여 현재 의 자물쇠 가 중단 되 었 음 을 표시 합 니 다. 모든 작업 을 하기 전에 이 인 터 럽 트 표 지 를 먼저 판단 하고 중단 되면 프로그램 이상 을 던 집 니 다.이렇게 하 는 것 이 도대체 어떻게 될 지 모 르 겠 습 니 다. 대 신 을 지나 가 의견 을 가르쳐 주시 기 바 랍 니 다!!완전히 독학 하 니 아 낌 없 는 가르침 을 바 랍 니 다.쓰 는 과정 에서 중단 표지 가 바 뀌 면 자물쇠 가 중단 되 는 것 을 고려 하여 unlock () 방법 으로 이 자 물 쇠 를 풀 어야 합 니까?
많은 의문 을 남기 고 지나 가 는 친구 가 자신의 의견 을 남기 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【eclipse】같은 파일을 2개 열고 싶다【에디터의 분할】「이런 것은 다른 클래스로 나누어야 한다!」라든지 있다고는 생각합니다만. 실제로 실무 속에서 프로그램을 쓰고 있으면, 이런 소스에 눈에 걸리는 일도 적지 않을까···. 그건 그렇고, 내 노트북에서 이렇게 보입니다 네...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.