Java Cache (LRU Cache) LinkedHachMap

2015.12.10 13:19JAVA

자바에서 사용중인 캐시중 EhCache 와 Spring을 사용하여 많이 사용한다.

간단하게 캐시 기능을 이용해 보면 어떨까하여 캐쉬 기능을알아보던중


LinkedHachMap를 이용해 보았다.

일반적으로  Collections의 Map은 순서가 없이 <Key,Value> 형태로 저장되고, 원하는 값을 검색할때 빠르게 찾을수 있는 특징을 가지고 있다.

LinkedHashMap는 기본적으로 HashMap을 상속받아 기능은 Map과 유사하나 저장한 순서대로 값이 들어가 있고,

removeEldestEntity() 가 특수한 기능을 한다.


removeEldestEntity : 값 생성시 들어온 순서를 기억하고 기준값보다(저장되는) 가장 마지막에 들어온 값을 삭제한다.

new LinkendHashMap(5);


example :



private int  MAX_ENTRIES = 5;


Map<String,Object> linkedMap = new LinkedHashMap<String,Object>(){

private static final long serialVersionUID = 7178628060319029923L;


/**

 * 가장 오래된 값을 삭제

 */

     @Ovrride

public boolean removeEldestEntry(Map.Entry<K, V> eldest) {

return this.size() == MAX_ENTRIES ? true : false ;

}

};





4개의 값만 가지고 있으며 최초의 값을 삭제 한다.



LinkedHashList는 가장 오래된 값을 삭제 하는데.

실제 카운트와 시간으로  LRU 알고리즘을 이용하여 가장 오랫동안 선택되지 않은 내용을 체크해보도록 하자.rk

 

100가 등록되며, 100개 이상이 (하나가더들어온경우)될때 카운트를 계산하여 가장 빈도수가 낮은것을 삭제 하고 새로운 것을 캐쉬에 넣는 샘플

LinkedHashMap에 대한 정렬 기능 추가

 



 



'JAVA' 카테고리의 다른 글

JAVA try catch with resource  (0) 2016.03.15
FileInputStream vs FileReader 그리고 차이점  (0) 2016.03.15
Java Cache (LRU Cache) LinkedHachMap  (0) 2015.12.10
java proxy , reflect  (0) 2015.04.20
대용량 검색 방법 Mybatis ResultHander  (2) 2015.01.29
JAVA custom listener  (0) 2015.01.15