Redis vs Memcached
https://brunch.co.kr/@springboot/218
Redis는 데이터를 atomic 하게 유지하는 목적으로 싱글스레드 - Eventloop
*Thread safe
변수,객체 등 여러 스레드에서 동시 접근 이루어져도 프로그램 실행에 문제 없는 것
Strings : key-value 구조
Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용
Sets : 순서는 유지되지 않음
Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지
Hahses : 내부에 key-value 구조를 하나더 가지는 Reids 자료구조
기본적으로 trancsaction 유지 위해서는 도중에 명령어가 들어오지 못하게 Lock이 필요.
MULTI: 트랜잭션 시작, queue에 쌓임
EXEC: commit
DISCARD: queue 폐기, rollback
WATCH: lock 담당, Optimistic 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