Redis는 완전한 데이터 정합성을 보장하기 위해 아래와 같이 뮤텍스와 세마포어를 사용한다.

두 프로세스가 거의 동시에 세마포어를 얻으려고 하는 경우를 대비해 락을 걸어놓은 것 같다.

def acquire_semaphore_with_lock(conn, semname, limit, timeout=10):
   identifier = acquire_lock(conn, semname, acquire_timeout=.01)
   if identifier:
      try:
         return acquire_fair_semaphore(conn, semname, limit, timeout)
   finally:
      release_lock(conn, semname, identifier)

물론 데이터 정합성 측면의 trade-off를 감수하고 더 simple한 세마포어를 사용하는 옵션도 지원한다고 한다.

(다만 System clock을 사용해야 하며, 스레드가 세마포어 limit을 초과하여 data에 접근하는 경우가 발생할 수 있다.)

 

 

[참고 사이트]

https://redis.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-3-counting-semaphores/6-3-4-preventing-race-conditions/

'~2022 > Database' 카테고리의 다른 글

[DB] ANSI SQL이란?  (0) 2021.08.22

SQL은 데이터베이스를 관리하기 위해 만들어진 프로그래밍 언어이며, 데이터베이스를 관리해주는 대부분의 DBMS(DataBase Management System; 오라클, MYSQL, MS-SQL 등)들은 SQL을 사용한다.

 

ANSI SQL은,

American National Standards Institute(미국 표준 협회)에서 정립한 Standard Query Language이다.

 

ANSI SQL은 모든 DBMS에서 호환는 SQL로,

Insert, Update, Delete, Join 등의 보편적인 쿼리 문법에 대해 특정 벤더에 종속되지 않는다는 장점이 있다. 

 

물론 특정 DBMS에서만 제공하는 함수를 사용하는 경우는 예외이다.

 

 

[참고 사이트]

https://lena19760323.tistory.com/60

https://tragramming.tistory.com/74

'~2022 > Database' 카테고리의 다른 글

[DB] Redis가 데이터 정합성을 보장하는 방법  (0) 2021.10.12

+ Recent posts