Redis 2편

이경환·2023년 6월 20일

DB

목록 보기
3/7

Redis LRU

레디스는 데이터를 영구적으로도 저장하지만, 보통은 데이터 접근을 빠르게 하기 위한 Cashe 로 많이 사용됩니다.

때문에 DISK를 사용하는 다른 솔루션 보다 적은 양의 데이터를 저장하게 되고, 효율적인 새로운 데이터를 저장하기 위해서는 기존 데이터를 버려야 하는 작업을 해야 합니다. 이를 eviction
(Expire 사라지는 것과는 다릅니다)

이 evicetion 방식중 하나가 LRU 입니다.
LRU말고도 LFU, RANDOM등이 있습니다.

LRU

LRU는오랫동안 참조되지 않은 페이지를 교체하는 기법입니다.

가장 오랫동안 사용하지 않았던 데이터라면 앞으로도 사용할 확률이 적을 것이라는 가정을 합니다.

정렬된 큐를 사용해 캐시 참조가 일어 날때마다 해당 항목을 큐의 맨앞으로 꺼내오고, 항목이 새로 들어왔다면 정렬된 큐의 가장 뒤쪽에 있는 가장 오래된 키를 날리고 큐 앞에 키를 추가하는 방법으로 구현이 가능합니다.

즉 정리하자면 LRU는 "새 데이터를 위한 공간을 만들기 위해 가장 최근에 사용되지 않은 데이터를 제거하는 캐시 교체 알고리즘입니다."

LRU를 구현할때는 Doubly Linked List 를 사용하고 head 에 가까운 node 일수록 가장 최근에 참조된 페이지, tail 에 가까운 node 일수록 가장 오랫동안 참조되지 않는 페이지입니다.

LRU에서 기억해야 할 두가지

  • HIT : cpu가 해야할 작업이 캐시에 있는 상태
  • MISS : cpu가 해야할 작업이 캐시에 없는 상태

RDB는 왜 NOSQL 보다 느릴까?

스키마 유연성

RDB에서 오는 데이터의 일관성과 무결성을 보장하는 약속,제약조건

인덱스 및 조인 처리

인덱스,조인도 비용이 많이드는 요인중 하나입니다.

트랜잭션

RDS는 높은 수준의 트렌잭션을 지원한다.(ACID)
반면 NOSQL은 높은 레벨의 트랜잭션이 지원되지 않는다 -> 데이터 중복에 의해 데이터의 일관성이 저하된다.

sql 데이터베이스(여기서는 간단하게 rdb)는 데이터 중복 및 데이터 중복을 방지하기 위해 다양한 논리적 테이블로 정규화된 데이터베이스입니다.
sql 데이터베이스는 조인, 쿼리, 업데이트 등에 대해 NoSQL보다 빠릅니다.

반면에 NoSQL 데이터베이스는 문서 지향, 열 지향, 그래프 기반 등이 될 수 있는 구조화되지 않은 데이터를 위해 특별히 설계되었습니다.
따라서 단일 엔티티에 대해 읽기 또는 쓰기 작업은 sql에 비해 NOSQL이 빠릅니다.

채팅 서비스 방식

  • 실시간 채팅 (Real-time Chat)
    Slack, WhatsApp, Discord
    웹 소켓을 사용

  • 비동기 채팅 (Asynchronous Chat)
    이메일, Facebook Messenger 등이 있습니다.
    보통 HTTP 롱 폴링을 사용

웹 소켓 (Web Socket)

폴링 (Polling)

참고자료 :
https://www.interviewcake.com/concept/java/lru-cache

https://doh-an.tistory.com/28

https://www.youtube.com/watch?v=HpuIrGiHwTo

profile
개선하는 개발자, 이경환입니다

0개의 댓글