ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Javascript LRU Cache
    개발 2023. 10. 11. 11:54

    Javascript 언어에서는 메모리 애플리케이션 메모리 공간을 캐시처럼 사용할 수 있는 기능을 제공한다. Redis처럼  key - value 로 사용하면 되는 줄 알았는데 사용방법이 약간 다르다.

     

    설명에 앞서 아래 코드의 결과 값을 예상해보자

    import LRU from 'lru-cache';
    
    const cache = new LRU<number, any>({ max: 3 });
    
    const props = new Set();
    cache.set(1, props);
    props.add('1');
    props.add('2');
    
    const result1 = cache.get(1);
    
    console.log('Result 1:', result1);

    set 함수가 실행된 후 props 에 ‘1’, ‘2’가 들어갔으므로 결과값이 빈 집합으로 예상할 수도 있다. 그런데 실제 결과 값은 아래와 같다.

     

    Result 1: Set(2) { '1', '2' }

    왜 그럴까? LRU 캐시는 값이 아니라 오브젝트에 대한 참조를 저장하고 있기 때문이다. 즉 props 라는 객체가 저장하는 값을 바라보고 있기 때문에 set 함수 실행이후 오브젝트의 변화값을 동시에 추적할 수 있게 된다. 

     

    마찬가지로 result 값을 참조한 후에 데이터 값을 변환해도 변경 사항을 참조할 수 있다

     

    import LRU from 'lru-cache';
    
    const cache = new LRU<number, any>({ max: 3 });
    
    const props = new Set();
    cache.set(1, props);
    props.add('1');
    props.add('2');
    
    const result1 = cache.get(1);
    props.add('3');
    
    console.log('Result 1:', result1);

     

    실행 결과 get 함수 실행 이후에 추가한 '3'까지 동시에 출력되는 것을 확인 할 수 있다. 

     

    Result 1: Set(3) { '1', '2', '3' }

     

     

     

    '개발' 카테고리의 다른 글

    Embedding, LangChain  (0) 2023.11.13
    세이노 GPT 개발 후기  (0) 2023.11.12
    spring batch  (1) 2023.06.30
    Session, Cookie, CSRF  (0) 2023.06.03
    python - async def, asyncio  (0) 2023.06.03

    댓글

Designed by Tistory.