20220516 Cache


title: "Cache" date: "2022-05-16"

modified: "2022-05-16"

뭔가 의미없지만 의미있는 정리2

면접때 뭘 물어보면 좋을까

Cache(Asynchronous Programming)

  1. 레벨1기초 : 1.1. 묻고자 하는바 : 캐시가 무엇이고 캐시의 기본 원리가 무엇인지 아는가? 1.2. 정답 - 주요 키워드 중심으로 :
  • 원리 : 참조 지역성의 원리(or 캐시 지역성, 캐시 로컬리티, locality of reference). 메모리상이 동일한 값 혹은 해당 값 근처들이 자주 액세스되는 특성. 근처의 값을 더 빠른 곳에 위치시켜 속도를 향상하고자 함. 근처(locality)는 아래와 같은 세가지 방식으로 분류함
  1. 레벨2심화 2.1.1. 묻고자 하는바 : 캐쉬에서 말하는 로컬리티에 대해서 알고 있는가? 2.1.2. 정답 - 주요 키워드 중심으로 : 1) 공간 : 특정 메모리에 인접한 메모리를 참조하는 경향이 있음. ex) 유명인 문제. 저스틴 비버의 인스타그램은 더 많이 참조되므로, 해당 DB가 있는 자원이 훨씬 더 많이 사용된다. 2) 시간 : 최근에 참조된 메로리를 다시 참조하는 경향이 있음. ex) 최근. LRU(Least Recently Used) 알고리즘을 사용 3) 순차 : 순차적으로 메모리를 참조하는 경향이 있음.

2.2.1. 묻고자 하는바 : 캐쉬의 교체 알고리즘은 무엇이 있는가? 2.2.2. 정답 - Cache replacement policies

2.3.1. 묻고자 하는바 : aside cache와 inline cache에 대해서 말하시오 2.3.2. 정답 - inline cache : 모든 데이터가 캐쉬에 있는 것을 기본으로.

  1. 레벨3응용 3.1. 묻고자 하는바 : 기본적인 리드캐쉬를 사용한 적이 있는가? 3.1.1. 상세 : 수억명의 사용자 정보가 저장된 유저 관리 시스템을 사용하고 있다. 유저의 고유값(uid)을 가지고 사용 디바이스 명(devicename)을 가져오는 시스템을 사용 중인데 매번 sql 쿼리를 날려 데이터를 긁어오는 것은 DB에 너무 큰 부담을 준다. 캐시(ex. redis 등)를 이용하여 리드 성능을 개선해보라. 3.2. 정답 - 알고리즘에서 해당 부분을 판단. 1) 유저 아이디(uid)로 캐쉬힛(캐쉬에 데이터가 있음)하면 캐쉬에서 해당유저의 디바이스 명(devicename)을 긁어옴 2) 캐쉬미스(캐쉬에 데이터가 없으면) 유저 아이디(uid)를 이용하여 DB에 쿼리를 날려 디바이스명(devicename)을 긁어옴

    function getDeviceName(uid : string) {
    //캐쉬서버에서 디바이스 이름 먼저 검색
    var devicename = cache.get(uid);
    //캐쉬 서버에 데이터가 없으면 DB검색
    if(devicename == null) {
    devicename = sql.get(uid);
    //최근 사용한 값이므로 locality에 따라 사용할 수 있도록 캐쉬에 넣어 둠
    cache.set(uid, devicename);
    }
    return devicename;
    }

참조

Redis를 활용한 데이터 캐싱하기

Cache replacement policies