-
パッケージ lhm.hcy.guge.frameset.cache;
java.util.* をインポートします。
/**
* <p>タイトル: </p>
*
* <p>説明: キャッシュを管理する</p>
* ディープブルー 2008-11-28 思う
* 拡張可能な機能: chche がメモリ オーバーフローに達すると、最初のキャッシュ オブジェクトの一部をクリアする必要があり、これには各キャッシュ オブジェクトの作成時間を節約する必要があります。
* <p>著作権: Copyright (c) 2008</p>
*
* <p>会社: </p>
*
* @author Deepblue 2008-11-11
* @バージョン1.0
*/
パブリック クラス CacheManager {
プライベート静的 HashMap キャッシュマップ = 新しい HashMap();
//シングルインスタンスの構築方法
private CacheManager() {
素晴らしい();
}
// ブール値のキャッシュを取得します
public static boolean getSimpleFlag(String key){
試す{
return(ブール値)cacheMap.get(key);
}catch(NullPointerException e){
false を返します。
}
}
public static long getServerStartdt(String key){
試す {
return (Long)cacheMap.get(key);
} catch (例外例) {
0を返します。
}
}
// ブール値のキャッシュを設定します
public synchronized static boolean setSimpleFlag(String key,boolean flag){
if (flag && getSimpleFlag(key)) {//true の場合、上書きは許可されません
false を返します。
}それ以外{
キャッシュマップ.put(キー、フラグ);
true を返します。
}
}
public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){
if (cacheMap.get(key) == null) {
cacheMap.put(key,serverbegrundt);
true を返します。
}それ以外{
false を返します。
}
}
//キャッシュを取得します。同期された静的メソッド
プライベート同期静的キャッシュ getCache(String key) {
return(キャッシュ)cacheMap.get(key);
}
//キャッシュがあるかどうかを判定する
private synchronized static boolean hasCache(String key) {
戻り値cacheMap.containsKey(key);
}
// キャッシュをすべてクリアする
public synchronized static void clearAll() {
キャッシュマップ.クリア();
}
//特定のタイプのキャッシュをクリアし、HASHMAP の下にあるすべてのオブジェクトを走査して、その KEY が受信した TYPE と一致するかどうかを判断します。
public synchronized static void clearAll(String型) {
イテレータ i =cacheMap.entrySet().iterator();
文字列キー。
ArrayList<String> arr = new ArrayList<String>();
試す {
while (i.hasNext()) {
java.util.Map.Entry エントリ = (java.util.Map.Entry) i.next();
key = (文字列)entry.getKey();
if (key.startsWith(type)) { //一致した場合は削除
arr.add(キー);
}
}
for (int k = 0; k < arr.size(); k++) {
clearOnly(arr.get(k));
}
} catch (例外例) {
ex.printStackTrace();
}
}
//指定されたキャッシュをクリアする
public synchronized static void clearOnly(String key) {
キャッシュマップ.削除(キー);
}
//キャッシュをロードする
public synchronized static void putCache(String key, Cache obj) {
cacheMap.put(key, obj);
}
//キャッシュ情報を取得する
パブリック静的キャッシュ getCacheInfo(String key) {
if (hasCache(key)) {
キャッシュキャッシュ = getCache(key);
if (cacheExpired(cache)) { //終了するかどうかを決定するメソッドを呼び出します
キャッシュ.setExpired(true);
}
キャッシュを返す。
}それ以外
null を返します。
}
//キャッシュ情報をロードする
public static void putCacheInfo(文字列キー、キャッシュobj、long dt、ブール値期限切れ) {
キャッシュキャッシュ = new Cache();
キャッシュ.setKey(キー);
ache.setTimeOut(dt + System.currentTimeMillis()); //キャッシュの更新にかかる時間を設定します。
キャッシュ.setValue(obj);
cache.setExpired(expired); //デフォルトでキャッシュがロードされた場合、終了ステータスは FALSE になります。
キャッシュマップ.put(キー, キャッシュ);
}
//キャッシュ情報の読み込みメソッドを書き換える
public static void putCacheInfo(String key,Cache obj,long dt){
キャッシュキャッシュ = new Cache();
キャッシュ.setKey(キー);
キャッシュ.setTimeOut(dt+System.currentTimeMillis());
キャッシュ.setValue(obj);
キャッシュ.setExpired(false);
キャッシュマップ.put(キー,キャッシュ);
}
//キャッシュが終了したかどうかを判断する
public static boolean cacheExpired(キャッシュ キャッシュ) {
if (null == キャッシュ) { //受信キャッシュは存在しません
false を返します。
}
long nowDt = System.currentTimeMillis(); //システム内の現在のミリ秒数
LONG CacheDt = Cache.getTimeOut(); //キャッシュ内の有効期限ミリ秒
if (cacheDt <= 0||cacheDt>nowDt) { //有効期限がゼロ以下の場合、または有効期限が現在時刻より大きい場合は FALSE
false を返します。
} else { //有効期限を超えた場合は期限切れになります
true を返します。
}
}
//キャッシュ内のサイズを取得する
public static int getCacheSize() {
戻りcacheMap.size();
}
//指定された型のサイズを取得する
public static int getCacheSize(String型) {
int k = 0;
イテレータ i =cacheMap.entrySet().iterator();
文字列キー。
試す {
while (i.hasNext()) {
java.util.Map.Entry エントリ = (java.util.Map.Entry) i.next();
key = (文字列)entry.getKey();
if (key.indexOf(type) != -1) { //一致する場合は削除
k++;
}
}
} catch (例外例) {
ex.printStackTrace();
}
k を返します。
}
// キャッシュ オブジェクト内のすべてのキー値の名前を取得します
public static ArrayList<String> getCacheAllkey() {
ArrayList a = 新しい ArrayList();
試す {
イテレータ i =cacheMap.entrySet().iterator();
while (i.hasNext()) {
java.util.Map.Entry エントリ = (java.util.Map.Entry) i.next();
a.add((String) エントリ.getKey());
}
} catch (例外例) {}finally {
を返します。
}
}
// キャッシュ オブジェクト内の指定された型のキー値の名前を取得します
public static ArrayList<String> getCacheListkey(String 型) {
ArrayList a = 新しい ArrayList();
文字列キー。
試す {
イテレータ i =cacheMap.entrySet().iterator();
while (i.hasNext()) {
java.util.Map.Entry エントリ = (java.util.Map.Entry) i.next();
key = (文字列)entry.getKey();
if (key.indexOf(type) != -1) {
a.add(キー);
}
}
} catch (例外例) {}finally {
を返します。
}
}
}
パッケージ lhm.hcy.guge.frameset.cache;
/**
* <p>タイトル: </p>
*
* <p>説明: キャッシュ DTO</p>
*
* <p>著作権: Copyright (c) 2008</p>
*
* <p>会社: </p>
*
* @author Deepblue 2008-11-11
* @バージョン1.0
*/
パブリック クラス キャッシュ {
秘密文字列キー;//キャッシュID
プライベートオブジェクト値 // キャッシュデータ;
private long timeOut;//更新時間
private boolean 期限切れ; //終了するかどうか
パブリック キャッシュ() {
素晴らしい();
}
public Cache(文字列キー、オブジェクト値、long timeOut、ブール値期限切れ) {
this.key = キー;
this.value = 値;
this.timeOut = タイムアウト;
this.expired = 期限切れ;
}
public String getKey() {
リターンキー;
}
public long getTimeOut() {
タイムアウトを返します。
}
パブリック オブジェクト getValue() {
戻り値;
}
public void setKey(String string) {
キー = 文字列;
}
public void setTimeOut(long l) {
タイムアウト = 1;
}
public void setValue(Object オブジェクト) {
値 = オブジェクト;
}
パブリックブール値 isExpired() {
返品期限切れ。
}
public void setExpired(boolean b) {
期限切れ = b;
}
}
//テストクラス、
クラステスト{
public static void main(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