분산 잠금은 실제로 분산 시스템을 제어하여 공유 리소스를 질서있게 운영하고 상호 배제를 통해 일관성을 유지하는 것으로 이해될 수 있습니다.
부적절한 예를 들자면: 공유 리소스는 다양한 책이 들어 있는 집이고, 분산 시스템은 책을 읽기 위해 집에 들어가고 싶어하는 사람들이고, 분산 잠금 장치라고 가정해 보겠습니다. 보장입니다. 집에는 문이 하나 뿐이고 한 번에 한 사람만 들어갈 수 있으며 문에는 열쇠가 하나뿐입니다. (추천 학습: Redis 동영상 튜토리얼)
redis를 사용하여 분산 잠금 구현 🎜# redis 명령을 사용하여 키 값 NX EX max-lock-time 설정 잠금 구현
redis 명령 EVAL을 사용하여 잠금 해제 구현
잠금: # 🎜🎜#
Jedis jedis = new Jedis("127.0.0.1", 6379); private static final String SUCCESS = "OK"; /** * 加锁操作 * @param key 锁标识 * @param value 客户端标识 * @param timeOut 过期时间 */ public Boolean lock(String key,String value,Long timeOut){ String var1 = jedis.set(key,value,"NX","EX",timeOut); if(LOCK_SUCCESS.equals(var1)){ return true; } return false; }
해석:
잠금 작업: jedis.set(key,value, "NX", "EX", timeOut) [원자 보장 잠금 동작]key는 잠금의 식별로 redis의 키 값이며, 여기서는 키-값만 일치하는 사람만이 권한을 갖습니다. 잠금 삭제 [보안 보장]
교착 상태가 발생하지 않도록 timeOut을 통해 만료 시간을 설정 [교착 상태 방지]NX, EX는 무엇입니까 평균?
NX: 키가 존재하지 않는 경우에만 작업이 수행됩니다.EX: 키의 만료 시간을 초로 설정합니다. , 구체적으로 시간은 다섯 번째 매개변수에 의해 결정됩니다. #🎜🎜 #luaScript 이 문자열은 lua 스크립트입니다. 즉, 키에 따라 얻은 값이 들어오는 값과 같으면 del을 실행하고, 그렇지 않으면 0을 반환합니다. [보안 보장] #🎜🎜 #jedis.eval (String, list, list); 이 명령은 lua 스크립트를 실행하는 명령입니다. KEYS 집합은 두 번째 매개 변수이고 ARGV 집합은 세 번째 매개 변수입니다. [잠금 해제를 보장하는 원자적 연산]
위의 내용은 Redis를 사용하여 분산 잠금을 올바르게 구현하는 방법이지만 잠금 만료 시간을 적절한 값으로 설정해야 한다는 작은 결함이 있으며 이는 실제로 비즈니스 시나리오에 따라 고려해야 합니다.
Redis 관련 기술 기사를 더 보려면
Redis 시작 튜토리얼열을 방문하여 알아보세요!
위 내용은 Redis를 사용하여 분산 잠금을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!