Redis 분산 락은 여러 인스턴스나 서버가 동시에 같은 자원(데이터)을 수정하거나 접근할 때 발생할 수 있는 충돌이나 Race Condition을 막기 위해 사용하는 일종의 락(Lock) 시스템
이를 Redis 의 빠른 In-Memory 특성을 활용하여 구현!
즉, 여러 서버/프로세스가 동시에 공유 리소스에 접근할 때, 한 시점에 하나만 접근 가능하게 보장해주는 락
-> 서버 간에도 락을 공유해야하기 때문에 Redis 같은 중앙 In-Memory 저장소를 활용
대표적인 방식으로 SET key value NX PX expireTime 사용
SET lock_key unique_value NX PX 3000
SET lock:seat:123 abc123 NX PX 3000
락을 해제할 땐 반드시 자기가 잡은 락인지 확인 후 지워야함
(unique_value 를 확인하고 지우는 로직을 Lua Script 를 활용하여 실행)
if redis.call("get", KEY[1]) == ARGV[1] then
return redis.call("del", KEYS[1])
else
return 0
end
Redlock 은 네트워크 장애나 Redis 장애에도 일정 수준의 안정성을 가져갈 수 있도록 설계된 분산 락 알고리즘
단일 Redis 에 의존하지 않고 여러 개의 Redis 노드에 락을 잡아서 다수결로 락 획득 여부를 결정