캐시의 낙관적 잠금과 비관적 잠금
환경에 공유 리소스가 있을 때마다 잠금이 필요합니다. 두 명 이상의 사용자가 리소스를 공유하면 데이터 불일치가 발생할 수 있습니다. 이와 같은 문제는 잠금을 통해 가장 잘 처리될 수 있습니다. 잠금 메커니즘을 사용하면 중요한 데이터 세트가 내결함성을 갖게 되어 사용자에게 원자성, 일관성 및 격리 기능을 제공합니다.
주의 사항
이 기능은 다음에서도 사용할 수 있습니다. NCache Professional.
NCache 다양한 병렬 클라이언트에 의해 업데이트되는 캐시 저장소 내 데이터 동기화 및 무결성을 위한 효율적인 잠금 메커니즘을 제공합니다. NCache 내부 잠금은 동일한 데이터가 업데이트될 때마다 전체 캐시 클러스터에서 데이터 일관성을 보장합니다. 추가적으로, NCache 단일 스레드나 애플리케이션만 업데이트하거나 읽을 수 있도록 특정 캐시 데이터를 잠그는 API를 제공합니다.
잠금을 사용하는 경우
문제 정책
두 명의 계좌 소유자가 사용하는 고유한 은행 계좌가 있는 시나리오를 생각해 보세요. 해당 계좌에는 $5000의 잔액이 있습니다. 사용자 1은 계좌에서 $2000를 인출하려고 하고, 사용자 2는 계좌에 $1000를 입금하려고 합니다. 주어진 조건을 고려할 때 이러한 작업을 수행한 후 계정 잔액은 $4000(5000-2000 = 3000 & 3000+1000 = 4000)가 되어야 합니다.
이제 두 사용자가 동시에 계정에서 이 작업을 수행하기를 원하지만 시나리오에 대한 적절한 처리가 없기 때문에 다음과 같은 일이 발생한다고 가정해 보겠습니다.
사용자 1이 계정 잔액을 확인했는데 $5000가 표시되었습니다. 그는 $2000를 인출하고 총 잔액은 $3000가 됩니다.
사용자 2가 계정 잔액을 확인하면 $5000가 표시됩니다. 그는 $1000를 입금하고 총 잔액은 $6000가 됩니다.
다음 다이어그램은 시나리오를 시각적으로 보여줍니다.
해법
이 공유 리소스 문제를 해결하려면 두 가지 접근 방식을 사용할 수 있습니다.
첫 번째 접근 방식은 한 사용자가 이미 어떤 종류의 작업을 수행하고 있는 경우 추가 작업을 위해 은행 계좌를 잠그는 것입니다.
두 번째 접근 방식은 두 사용자가 모두 사용할 수 있도록 은행 계좌가 열려 있지만 수행되는 모든 작업의 현재 시간과 관련하여 은행 계좌 버전이 업데이트되는 메커니즘을 사용하는 것입니다. 이렇게 하면 사용자 작업에 새 버전을 사용할 수 있습니다.
NCache 비관적 잠금과 낙관적 잠금으로 알려진 잠금 메커니즘을 모두 제공합니다. 이에 대해서는 다음 장에서 자세히 설명합니다.
유형: 낙관적 잠금과 비관적 잠금
두 가지 유형의 잠금을 사용할 수 있습니다. NCache:
비관적 잠금(배타적 잠금)
비관적 잠금은 항목을 독점적으로 잠그는 메커니즘입니다.LockHandle
잠긴 동안 다른 사용자가 항목에 액세스할 수 없기 때문입니다.낙관적 잠금(캐시 항목 버전 관리)
낙관적 잠금은 항목 버전 관리를 사용하여 항목을 잠그는 메커니즘입니다. 이 메커니즘을 사용하면 다른 사용자가 사용할 수 있도록 항목이 열리지만 항목에 대해 수행되는 모든 작업에서 항목 버전이 자동으로 업데이트됩니다.
도 참조
.그물: Alachisoft.NCache.런타임.캐싱 네임 스페이스.
자바 : COM.alachisoft.ncache.런타임.캐싱 네임 스페이스.
Node.js : 캐시 클래스입니다.
파이썬 : ncache.런타임.캐싱 클래스입니다.