리더보드 기능이란 실시간 랭킹을 보여주는 기능
게임이라면 점수 순위, 검색 엔진이면 실시간 검색 순위, 그리고 이커머스 분야라면 인기상품과 같은 기능들을 보여주기 위해 사용
In RDBMS
이커머스를 기준으로 생각을 해보면, 인기의 기준을 가장 많이 구매한 물품으로 생각해볼 수 있다. 가장 많이 구입된 물품을 반환하는 기능을 만든다고 가정하면, 가장 많은 주문이 있는 물품을 구하려면 복잡한 Join과 함께, SUM , COUNT 등의 집계함수가 필요
Sorted Set
ZADD의 시간복잡도가 O(log(N))ZRANGE의 시간복잡도가 O(log(N) + M)Redis가 많이 활용되는 또다른 주제는 캐싱(Caching)으로 자주 사용되는 데이터를 더 빠른 캐시(Cache)에 저장하는 기법
Cache는 본래 CPU 내부의 작은 영역으로, 정말 빈번히 접근하게 되는 데이터를 저장해두는 임시 기억 장치
기본적으로 영속성을 위해 파일시스템(디스크)에 저장하고, 빠른 활용을 위해 메모리(RAM)에 저장한다면, 정말 많이 사용되는 휘발성 데이터가 캐시에 저장

웹 개발자가 직접적으로 다루는 부분은 아니지만, 캐시의 목적과 방식을 웹 개발에 적용해, 빈번하게 접근하게 되는 데이터베이스의 데이터를 Redis 등의 인메모리 데이터베이스에 저장을 함으로서 데이터를 조회하는데 걸리는 시간과 자원을 감소시키는 기술을 캐싱

웹 브라우저에서는 자주 바뀌지 않는 이미지 등을 브라우저 캐시에 저장해 페이지 로드를 줄이는 것도 캐싱의 일종이며, 이는 RESTful 설계 원칙 중에서 응답이 캐싱이 가능한지 명시해야 한다는 제약사항으로도 나타
기본적으로 캐시는 본래 저장된 곳이 아닌 다른곳에 데이터를 저장하는 행위
언제든 사라질 수 있는 데이터가 있는 곳이며, 너무 크지 않게 관리
캐시를 확인했을때 자신이 필요한 데이터가 있을 수도, 없을 수도 있다는 것을 고려
캐시를 구현하고 사용할때는 해당 데이터가 얼마나 자주 사용될 것인가를 고려
전략을 잘 새워, 적중률을 높이고 누락을 최대한 줄인다.
Cache-Aside
Lazy Loading이라고도 하며, 데이터를 조회할 때 항상 캐시를 먼저 확인하는 전략

Write-Through
데이터를 작성할때 항상 캐시에 작성하고, 원본에도 작성하는 전략

Write-Behind
캐시에만 데이터를 작성하고, 일정 주기로 원본을 갱신하는 방식
