-
패키지 lhm.hcy.guge.frameset.cache;
import java.util.*;
/**
* <p>제목: </p>
*
* <p>설명: 캐시 관리</p>
* 딥블루 2008-11-28생각
* 확장 가능한 기능: chche가 메모리 오버플로에 도달하면 가장 초기의 캐시 개체 중 일부를 지워야 하며, 이를 위해서는 각 캐시 개체의 생성 시간을 절약해야 합니다.
* <p>저작권: Copyright (c) 2008</p>
*
* <p>회사: </p>
*
* @author 딥블루 2008-11-11
* @버전 1.0
*/
공개 클래스 CacheManager {
private static HashMap 캐시맵 = new HashMap();
//단일 인스턴스 생성 방법
개인 CacheManager() {
감독자();
}
//부울 값 캐시를 가져옵니다.
공개 정적 부울 getSimpleFlag(문자열 키){
노력하다{
return (Boolean) 캐시맵.get(key);
}catch(NullPointerException e){
거짓을 반환;
}
}
public static long getServerStartdt(문자열 키){
노력하다 {
return (Long)cacheMap.get(key);
} catch (예외예외) {
0을 반환합니다.
}
}
//부울 값 캐시 설정
공개 동기화 정적 부울 setSimpleFlag(문자열 키, 부울 플래그){
if (flag && getSimpleFlag(key)) {//true이면 덮어쓰기가 허용되지 않습니다.
거짓을 반환;
}또 다른{
캐시맵.put(키, 플래그);
사실을 반환;
}
}
공개 동기화 정적 부울 setSimpleFlag(문자열 키, 긴 서버begrundt){
if (cacheMap.get(key) == null) {
캐시맵.put(key,serverbegrundt);
사실을 반환;
}또 다른{
거짓을 반환;
}
}
//캐시를 구합니다. 동기화된 정적 메서드
개인 동기화 정적 캐시 getCache(String key) {
(캐시)를 반환합니다.cacheMap.get(key);
}
//캐시가 있는지 확인
개인 동기화 정적 부울 hasCache(문자열 키) {
return cashMap.containsKey(key);
}
//모든 캐시 지우기
공개 동기화 정적 무효 ClearAll() {
캐시맵.clear();
}
//특정 유형의 캐시를 지우고 HASHMAP 아래의 모든 객체를 탐색하여 해당 KEY가 들어오는 유형과 일치하는지 확인합니다.
공개 동기화 정적 무효 클리어All(문자열 유형) {
반복자 i = 캐시맵.entrySet().iterator();
문자열 키;
ArrayList<String> arr = new ArrayList<String>();
노력하다 {
동안(i.hasNext()) {
java.util.Map.Entry 항목 = (java.util.Map.Entry) i.next();
키 = (문자열) Entry.getKey();
if (key.startsWith(type)) { //일치하면 삭제
arr.add(키);
}
}
for (int k = 0; k < arr.size(); k++) {
clearOnly(arr.get(k));
}
} catch (예외예외) {
ex.printStackTrace();
}
}
//지정된 캐시를 지웁니다.
공개 동기화 정적 무효 ClearOnly(문자열 키) {
캐시맵.제거(키);
}
//캐시 로드
공개 동기화 정적 무효 putCache(문자열 키, 캐시 obj) {
캐시맵.put(key, obj);
}
//캐시 정보 얻기
공개 정적 캐시 getCacheInfo(문자열 키) {
if (hasCache(키)) {
캐시 캐시 = getCache(key);
if (cacheExpired(cache)) { //종료 여부를 결정하는 메소드를 호출합니다.
캐시.setExpired(true);
}
캐시 반환;
}또 다른
null을 반환;
}
//캐시 정보 로드
공개 정적 무효 putCacheInfo(문자열 키, 캐시 obj, 긴 dt, 부울 만료됨) {
캐시 캐시 = new Cache();
캐시.setKey(키);
캐시.setTimeOut(dt + System.currentTimeMillis()); //캐시 업데이트에 걸리는 시간을 설정합니다.
캐시.setValue(obj);
캐시.setExpired(expired); //기본적으로 캐시가 로드되면 종료 상태는 FALSE입니다.
캐시맵.put(키, 캐시);
}
//캐시 정보를 로드하는 방법을 다시 작성합니다.
공개 정적 무효 putCacheInfo(문자열 키, 캐시 obj, 긴 dt){
캐시 캐시 = new Cache();
캐시.setKey(키);
캐시.setTimeOut(dt+System.currentTimeMillis());
캐시.setValue(obj);
캐시.setExpired(false);
캐시맵.put(키,캐시);
}
//캐시 종료 여부를 판단
공개 정적 부울 캐시만료(캐시 캐시) {
if (null == 캐시) { //들어오는 캐시가 존재하지 않습니다.
거짓을 반환;
}
long nowDt = System.currentTimeMillis(); //시스템의 현재 시간(밀리초)
긴 캐시Dt = 캐시.getTimeOut(); //캐시 만료 시간(밀리초)
if (cacheDt <= 0||cacheDt>nowDt) { //만료 시간이 0 이하이거나 만료 시간이 현재 시간보다 큰 경우 FALSE입니다.
거짓을 반환;
} else { //만료 시간보다 크면 만료됩니다.
사실을 반환;
}
}
//캐시에서 크기를 가져옵니다.
공개 정적 int getCacheSize() {
캐시맵.크기()를 반환합니다.
}
//지정된 유형의 크기를 가져옵니다.
공개 정적 int getCacheSize(문자열 유형) {
정수 k = 0;
반복자 i = 캐시맵.entrySet().iterator();
문자열 키;
노력하다 {
동안(i.hasNext()) {
java.util.Map.Entry 항목 = (java.util.Map.Entry) i.next();
키 = (문자열) Entry.getKey();
if (key.indexOf(type) != -1) { //일치하면 삭제
k++;
}
}
} catch (예외예외) {
ex.printStackTrace();
}
k를 반환;
}
//캐시 객체의 모든 키 값 이름을 가져옵니다.
공개 정적 ArrayList<String> getCacheAllkey() {
ArrayList a = new ArrayList();
노력하다 {
반복자 i = 캐시맵.entrySet().iterator();
동안(i.hasNext()) {
java.util.Map.Entry 항목 = (java.util.Map.Entry) i.next();
a.add((String) Entry.getKey());
}
} catch (예외 예) {} finally {
반환하다;
}
}
//캐시 객체에 지정된 유형의 키 값 이름을 가져옵니다.
public static ArrayList<String> getCacheListkey(문자열 유형) {
ArrayList a = new ArrayList();
문자열 키;
노력하다 {
반복자 i = 캐시맵.entrySet().iterator();
동안(i.hasNext()) {
java.util.Map.Entry 항목 = (java.util.Map.Entry) i.next();
키 = (문자열) Entry.getKey();
if (key.indexOf(type) != -1) {
a.추가(키);
}
}
} catch (예외 예) {} finally {
반환하다;
}
}
}
패키지 lhm.hcy.guge.frameset.cache;
/**
* <p>제목: </p>
*
* <p>설명: 캐시 DTO</p>
*
* <p>저작권: Copyright (c) 2008</p>
*
* <p>회사: </p>
*
* @author 딥블루 2008-11-11
* @버전 1.0
*/
공개 클래스 캐시 {
개인 문자열 키;//캐시 ID
개인 개체 값; // 데이터 캐시
private long timeOut;//업데이트 시간
개인 부울 만료됨 //종료 여부
공개 캐시() {
감독자();
}
공개 캐시(문자열 키, 개체 값, 긴 timeOut, 부울 만료됨) {
this.key = 키;
this.value = 값;
this.timeOut = 시간아웃;
this.expired = 만료됨;
}
공개 문자열 getKey() {
리턴 키;
}
공개 긴 getTimeOut() {
timeOut을 반환합니다.
}
공공 객체 getValue() {
반환값;
}
공개 무효 setKey(문자열 문자열) {
키 = 문자열;
}
공공 무효 setTimeOut(긴 l) {
시간 초과 = l;
}
공공 무효 setValue(객체 객체) {
값 = 객체;
}
공개 부울 isExpired() {
반품이 만료되었습니다.
}
공공 무효 setExpired(부울 b) {
만료됨 = b;
}
}
//테스트 클래스,
클래스 테스트 {
공개 정적 무효 메인(String[] args) {
System.out.println(CacheManager.getSimpleFlag("alksd"));
// CacheManager.putCache("abc", new Cache());
// CacheManager.putCache("def", new Cache());
// CacheManager.putCache("ccc", new Cache());
// CacheManager.clearOnly("");
// 캐시 c = new Cache();
// for (int i = 0; i < 10; i++) {
// CacheManager.putCache("" + i, c);
// }
// CacheManager.putCache("aaaaaaaa", c);
// CacheManager.putCache("abchcy;alskd", c);
// CacheManager.putCache("cccccccc", c);
// CacheManager.putCache("abcoqiwhcy", c);
// System.out.println("삭제 전 크기: "+CacheManager.getCacheSize());
// CacheManager.getCacheAllkey();
// CacheManager.clearAll("aaaa");
// System.out.println("삭제 후 크기: "+CacheManager.getCacheSize());
// CacheManager.getCacheAllkey();
}
}
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/hello_zhenyu/archive/2009/12/18/5030366.aspx