[ALGORITHM] LRU 캐시

2021. 8. 8. 22:39·ALGORITHM & DATA STRUCTURE
728x90

캐시 정의

  • 빠른 검색과 조회를 위해 자주 사용되는 데이터나 값을 미리 복사해 놓는 임시 장소
  • 주로 데이터 접근시 오래걸리거나 값을 다시 계산해야할 때 절약해야 하는 경우 사용

LRU (Least Recently Used) 캐시

https://www.topjavatutorial.com/java/java-programs/lru-cache-java/ 참고

  • 최근에 가장 오래 사용하지 않은 페이지를 교체하는 기법
  • 캐시에 공간이 부족시 가장 최근에 사용하지 않은 데이터(가장 오래된 데이터)를 제거
  • 메모리 상에서 가장 오래된 데이터를 새로운 데이터로 갱신함

자바 구현 예시

LinkedList로 구현

public class LRUCache {

  public int size;
  public LinkedList<Integer> cache;

  public LRUCache(int size) {
    this.size = size;
    this.cache = new LinkedList<>();
  }

  public void query(int number) {
    if (cache.contains(number)) {
      cache.remove(number);
      cache.add(number);
    } else {
      if (this.size ==  cache.size()) {
        cache.removeLast();
      }
      cache.addFirst(number);
    }
  }
}

LinkedHashSet으로 구현

public class LRUCache {
 
  public int size;
  public Set<Integer> cache;

  public LRUCache(int size) {
    this.size = size;
    this.cache = new LinkedHashSet<>();
  }

  public void query(int number) {
    if (cache.contains(number)) {
      cache.remove(number);
      cache.add(number);
    } else {
      if (this.size == cache.size()) {
        int lastRemoveData = cache.iterator().next();
        cache.remove(lastRemoveData);
      }
      cache.add(number);
    }
  }
}

 

저작자표시

'ALGORITHM & DATA STRUCTURE' 카테고리의 다른 글

[ALGORITHM] 다익스트라 알고리즘  (0) 2021.09.23
[ALGORITHM] 순차탐색 / 이진탐색  (0) 2021.09.21
[ALGORITHM] 재귀 호출  (0) 2021.09.20
[ALGORITHM] 백트래킹  (0) 2021.09.20
[ALGORITHM] 시간복잡도 / 공간복잡도  (0) 2021.06.19
'ALGORITHM & DATA STRUCTURE' 카테고리의 다른 글
  • [ALGORITHM] 순차탐색 / 이진탐색
  • [ALGORITHM] 재귀 호출
  • [ALGORITHM] 백트래킹
  • [ALGORITHM] 시간복잡도 / 공간복잡도
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    ElasticSearch
    splunk
    IntelliJ
    Spring
    코틀린
    이펙티브코틀린
    java
    SQL
    이펙티브 코틀린
    Kafka
    엘라스틱서치
    Elk
    클린코드
    docker
    go
    AWS
    프로그래머스
    JPA
    cleancode
    자바
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[ALGORITHM] LRU 캐시
상단으로

티스토리툴바