728x90
반응형
MySQL에서 GET_LOCK과 RELEASE_LOCK으로 분산 락을 구현할 수 있습니다.
GET_LOCK(str, timeout) | Get a named lock 문자열 str에 해당하는 Lock을 획득하는 메소드 · return 1 - Lock 획득 성공 · return 0 - timeout 동안 Lock 획득 못한 경우 · return null - 에러 발생 |
IS_FREE_LOCK(str) | Whether the named lock is free 문자열 str을 사용할 수 있는 상태인지 체크 · return 1 - Lock이 비어있는 경우 · return 0 - Lock이 비어있지 않은 경우 |
IS_USED_LOCK(str) | Whether the named lock is in use; return connection identifier if true 문자열 str이 사용되고 있는지 체크 · return connection identifier - 사용중 · return null - 미사용중 |
RELEASE_ALL_LOCKS() | Release all current named locks 모든 Lock 해제. 해제된 lock 개수 return |
RELEASE_LOCK(str) | Release the named lock 문자열 str에 해당하는 Lock 해제 · return 1 - Lock 해제 · return null - 해제할 Lock 없음 |
MySql 5.7부터 하나의 세션에서 연속으로 동일한 Lock 이름으로 잡으면 그 횟수만큼 중복으로 Lock이 잡힌다.
-- lock 1
SELECT GET_LOCK('session key', 1); -- 1
SELECT IS_FREE_LOCK('session key'); -- 0
-- lock 2
SELECT GET_LOCK('session key', 1); -- 1
SELECT IS_FREE_LOCK('session key'); -- 0
-- release 1
SELECT RELEASE_LOCK('session key'); -- 1
SELECT IS_FREE_LOCK('session key'); -- 0
-- release 2
SELECT RELEASE_LOCK('session key'); -- 1
SELECT IS_FREE_LOCK('session key'); -- 1
-- release 3 : 이미 모든 lock이 해지된 상태
SELECT RELEASE_LOCK('session key'); -- null
[Reference]
https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html
728x90
반응형
'database > mysql' 카테고리의 다른 글
[MySQL] int(n)와 zerofill, varchar(n)와 sql_mode (0) | 2022.01.10 |
---|---|
[MySQL] UTC PST PDT KST와 datetime vs timestamp (0) | 2021.12.16 |
[MySQL] 카디널리티 cardinality (0) | 2020.11.01 |
[MySQL] Query 성능 확인 (0) | 2020.11.01 |
[MySQL] 특정 필드 ,(콤마)로 나열하여 조회하기 : GROUP_CONCAT (0) | 2020.11.01 |
댓글