분산 잠금은 실제로 분산 시스템을 제어하여 공유 리소스를 질서 있게 운영하고 상호 배제를 통해 일관성을 유지하는 것으로 이해될 수 있습니다.
부적절한 예를 들어보세요: (권장 학습: Redis 비디오 튜토리얼#🎜🎜 #)# 🎜🎜# 공유 자원은 다양한 책이 들어 있는 집이고, 분산 시스템은 책을 읽기 위해 집에 들어가고 싶어하는 사람들이며, 분산 잠금 장치는 집에 문이 하나뿐이고 하나만 있다는 것을 보장한다고 가정합니다. 한 번에 한 명씩 들어갈 수 있으며 문 열쇠는 하나뿐입니다. 그러면 많은 사람들이 책을 읽고 싶어 하는데, 줄을 서고, 첫 번째 사람이 열쇠를 가지고 문을 열고 들어가서 책을 읽다가 문을 잠그면, 두 번째 사람이 열쇠가 없으니 기다리면 됩니다. 첫 번째 항목이 나올 때까지 기다렸다가 가져옵니다. 키를 사용하여 입력합니다.
구현 원칙#🎜 🎜#상호 배타성
한 클라이언트만 동시에 잠금을 얻을 수 있는지 확인합니다. 즉, 공유 리소스에서 작동할 수 있습니다.
#🎜🎜 #Security잠긴 서비스만 잠금 해제 권한을 가질 수 있습니다. 즉, a로 추가한 잠금은 잠금 해제할 수 없으며 bcd는 모두 잠금 해제할 수 있으면 분산 잠금이 됩니다. 의미가 없게 됩니다 가능한 상황은 a가 쿼리를 하러 갔더니 잠금을 보유하고 있는 것을 발견하고 잠금을 해제하려고 하는 시점에서 a가 보유하고 있던 잠금이 갑자기 만료된 후 b입니다. A의 잠금이 만료되었기 때문에 B는 잠금을 해제하기 위해 계속해서 두 번째 단계를 수행했습니다. 추가된 확인이 없으면 B가 보유한 잠금이 삭제됩니다
#🎜 🎜#교착 상태 방지
교착 상태 발생 이후의 모든 서비스는 잠금을 얻을 수 없으며 더 이상 공유 리소스에 대한 작업을 수행할 수 없습니다. 🎜🎜# 이는 실제로 분산 잠금 구현의 문제입니다. redis를 사용하여 분산 잠금을 구현한다고 가정해 보세요잠금 작업을 가정하면 작업 단계는 두 단계로 나뉩니다.
1. 키 세트 설정(키, 값) 2. 키의 만료 시간 설정 a가 세트를 방금 구현한 후 프로그램이 충돌하여 만료 시간을 설정하지 않고 키가 존재한다고 가정합니다. 키 교착상태 발생분산 잠금 구현 방법
위의 조건만 충족된다면 분산 잠금을 구현하는 방법은 다양합니다. Database, Redis, Zookeeper 등의 분산 잠금을 구현하기 위해 먼저 Redis를 사용하여 분산 잠금을 구현하는 방법에 대해 설명합니다분산 잠금 구현의 핵심은 다음과 같습니다. 분산 애플리케이션 서버 추가적으로 잠금 정보를 저장하기 위한 스토리지 서버를 구축하는 경우에는 Redis를 쉽게 떠올릴 수 있습니다. 먼저 Redis 서버를 구축하고 Redis 서버를 사용하여 잠금 정보를 저장해야 합니다.
redis를 사용하여 분산 잠금 구현
redis 명령 세트 키 값 NX EX max-lock-time을 사용하여 구현 잠금 redis 명령 EVAL을 사용하여 잠금 해제를 달성하세요구현할 때 주의해야 할 몇 가지 핵심 사항:
1. 잠금 정보는 만료되고 시간 초과되어야 하며, 한 스레드가 오랫동안 잠금을 점유하도록 허용할 수 없으며
2 한 스레드만 동시에 잠금을 얻을 수 있습니다.사용할 여러 redis 명령:
setnx(key, value): "종료하지 않으면 설정", 키가 -인 경우 값이 존재하지 않으면 캐시에 성공적으로 추가되어 1이 반환되고, 그렇지 않으면 0이 반환됩니다.
get(key): 키에 해당하는 값을 가져오거나 키가 없으면 nil을 반환합니다. getset(key, value): 먼저 키에 해당하는 값을 가져오고, 존재하지 않으면 nil을 반환한 다음 이전 값을 새 값으로 업데이트합니다. expire(key, second): 키-값의 유효 기간을 초로 설정합니다.Redis 관련 기술 기사를 더 보려면 Redis 데이터베이스 사용 튜토리얼
열을 방문하여 알아보세요!위 내용은 Redis 분산 잠금이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!