Redis

오민석·2021년 10월 4일
0
post-thumbnail

캐싱 방법

Redis vs Memcached

  • 다양한 자료구조 지원(Collection): 비즈니스 로직에 집중 ex. sorted-set
  • 한 개의 키에 저장할 수 있는 VALUE의 범위가 Memcached에 비해 더 큼(512mb, 1mb)
  • failover 및 disk 저장

https://brunch.co.kr/@springboot/218

Redis Single Thread

Redis는 데이터를 atomic 하게 유지하는 목적으로 싱글스레드 - Eventloop

  • atomic: 여러 개의 스레드가 하나의 공유 자원에 접근하여 sync가 안되는 상황에 결과값이 달라지는 것. 순차 처리 보장X
  • deadlock: 여러개의 스레드가 lock에 대해서 계속 대기 상태

*Thread safe
변수,객체 등 여러 스레드에서 동시 접근 이루어져도 프로그램 실행에 문제 없는 것

Redis 자료구조

Strings : key-value 구조
Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용
Sets : 순서는 유지되지 않음
Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지
Hahses : 내부에 key-value 구조를 하나더 가지는 Reids 자료구조

  • 시간복잡도: get,set의 초당 10만개 가능
    keys, get all collections -> O(N)

Redis 트랜잭션

기본적으로 trancsaction 유지 위해서는 도중에 명령어가 들어오지 못하게 Lock이 필요.
MULTI: 트랜잭션 시작, queue에 쌓임
EXEC: commit
DISCARD: queue 폐기, rollback
WATCH: lock 담당, Optimistic Lock기반

Lock

트랜잭션 처리 순차성 보장위한 개념

Shared Lock(read lock): 데이터 읽는 것은 여러 사용자가 동시에 접근 가능. 하지만 변경은 불가.

Exclusive Lock(write lock): 해당 lock이 해제되기 전까지는, 공유lock 및 배타lock 설정 불가. 읽기 및 쓰기가 불가

pessimistic lock: 트랜잭션 시작 시 shared lock 혹은 exclusive lock 걸고 시작. 해당 트랜잭션 제외한 모든 트랜잭션이 commit 후 실행

optimistic lock: DB가 아닌 어플리케이션 level에서 lock. 2번째로 변경하는 사람은 rollback

Deadlock(교착상태): 교착상태는 두 트랜잭션이 각각 Lock을 설정하고 다음 서로의 Lock에 접근하여 값을 얻어오려고 할 때 이미 각각의 트랜잭션에 의해 Lock이 설정되어 있기 때문에 양쪽 트랜잭션 모두 영원히 처리가 되지않게 되는 상태

Race condidtion(blocking): 여러 스레드가 공통 자원 접근 시 순서에 따라 결과가 같지 않고 달라지는 상황

트랜잭션 격리성

https://sabarada.tistory.com/117

주의할점

Collection의 모든 아이템을 가져와야 할 때?
keys, get all collections -> O(N)
Collection의 일부만 가져오거나
큰 Collections을 여러개의 Collection으로 나눠서 저장(몇 천개씩)

https://www.oss.kr/storage/app/public/festival/track2/2-1.pdf

Reference
https://sabarada.tistory.com/117
https://sabarada.tistory.com/134?category=856943

0개의 댓글