-
пакет lhm.hcy.guge.frameset.cache;
импортировать java.util.*;
/**
* <p>Название: </p>
*
* <p>Описание: Управление кешем</p>
* Темно-синий 28 ноября 2008 г., думаю
* Расширяемая функция: когда chche достигает переполнения памяти, некоторые из самых ранних объектов кэша должны быть очищены, что требует экономии времени создания каждого объекта кэша.
* <p>Авторское право: Copyright (c) 2008</p>
*
* <p>Компания: </p>
*
* @author Deepblue 11 ноября 2008 г.
* @версия 1.0
*/
публичный класс CacheManager {
частный статический HashMap cacheMap = новый HashMap();
//Метод построения одного экземпляра
частный CacheManager() {
супер();
}
//Получаем кеш логических значений
public static boolean getSimpleFlag(String key){
пытаться{
return (логическое значение)cacheMap.get(key);
}catch(NullPointerException e){
вернуть ложь;
}
}
public static long getServerStartdt(String key){
пытаться {
вернуть (Long)cacheMap.get(ключ);
} catch (исключение ex) {
вернуть 0;
}
}
//Устанавливаем кеш логических значений
общедоступный синхронизированный статический логический setSimpleFlag (строковый ключ, логический флаг) {
if (flag && getSimpleFlag(key)) {//Если true, перезапись не разрешена
вернуть ложь;
}еще{
cacheMap.put(ключ, флаг);
вернуть истину;
}
}
общедоступная синхронизированная статическая логическая переменная setSimpleFlag(String key,long serverbegrundt){
если (cacheMap.get(key) == null) {
cacheMap.put(ключ,serverbegrundt);
вернуть истину;
}еще{
вернуть ложь;
}
}
//Получаем кеш. Синхронизированные статические методы
частный синхронизированный статический кеш getCache(String key) {
return (Кэш)cacheMap.get(ключ);
}
//Определяем, есть ли кэш
частный синхронизированный статический логический hasCache (строковый ключ) {
вернуть кэшMap.containsKey(ключ);
}
//Очистить все кеши
общедоступная синхронизированная статическая сила ClearAll() {
кэшМап.очистить();
}
// Очищаем кэш определенного типа и определяем, соответствует ли его КЛЮЧ входящему ТИПУ, просматривая все объекты в HASHMAP
общедоступная синхронизированная статическая сила ClearAll (тип String) {
Итератор i = кэшMap.entrySet().iterator();
Строковый ключ;
ArrayList<String> arr = новый ArrayList<String>();
пытаться {
в то время как (i.hasNext()) {
запись java.util.Map.Entry = (java.util.Map.Entry) i.next();
ключ = (String) вход.getKey();
if (key.startsWith(type)) { //Если совпадение, удалить
arr.add (ключ);
}
}
for (int k = 0; k < arr.size(); k++) {
ClearOnly(arr.get(k));
}
} catch (исключение ex) {
ex.printStackTrace();
}
}
//Очищаем указанный кеш
общедоступная синхронизированная статическая сила ClearOnly (строковый ключ) {
кэшMap.remove (ключ);
}
//Загрузка кэша
общедоступная синхронизированная статическая сила putCache (String key, Cache obj) {
кэшМап.пут (ключ, объект);
}
//Получаем информацию о кэше
общедоступный статический кэш getCacheInfo (строковый ключ) {
если (hasCache(ключ)) {
Кэш-кеш = getCache(ключ);
if (cacheExpired(cache)) { //Вызов метода, чтобы определить, следует ли завершать работу
кэш.setExpired(истина);
}
возврат кэша;
}еще
вернуть ноль;
}
//Загрузка информации из кэша
public static void putCacheInfo(String key, Cache obj, long dt, boolean expired) {
Кэш-кеш = новый Кэш ();
кэш.setKey(ключ);
кэш.setTimeOut(dt + System.currentTimeMillis()); //Устанавливаем время обновления кеша
кэш.setValue(объект);
кэш.setExpired(expired); //Когда кеш загружается по умолчанию, статус завершения равен FALSE
cacheMap.put(ключ, кеш);
}
//Перепишем метод загрузки информации из кэша
public static void putCacheInfo(String key,Cache obj,long dt){
Кэш-кеш = новый Кэш ();
кэш.setKey(ключ);
кэш.setTimeOut(dt+System.currentTimeMillis());
кэш.setValue(объект);
кэш.setExpired(ложь);
cacheMap.put(ключ,кэш);
}
//Определяем, завершен ли кеш
public static booleancacheExpired(Кэш-кэш) {
if (null == кэш) { //Входящий кеш не существует
вернуть ложь;
}
long nowDt = System.currentTimeMillis(); //Текущее количество миллисекунд в системе
long кэшDt = кэш.getTimeOut() // Срок действия кэша в миллисекундах
if (cacheDt <= 0||cacheDt>nowDt) { //Когда срок действия меньше или равен нулю или когда срок действия больше текущего времени, это ЛОЖЬ
вернуть ложь;
} else { //Срок действия истекает, если он превышает срок действия
вернуть истину;
}
}
//Получить размер в кеше
public static int getCacheSize() {
вернуть кэшMap.size();
}
//Получаем размер указанного типа
public static int getCacheSize (тип String) {
интервал к = 0;
Итератор i = кэшMap.entrySet().iterator();
Строковый ключ;
пытаться {
в то время как (i.hasNext()) {
запись java.util.Map.Entry = (java.util.Map.Entry) i.next();
ключ = (String) вход.getKey();
if (key.indexOf(type) != -1) { //Если совпадает, удаляем
к++;
}
}
} catch (исключение ex) {
ex.printStackTrace();
}
вернуть К;
}
//Получаем все имена значений ключей в объекте кэша
public static ArrayList<String> getCacheAllkey() {
ArrayList a = новый ArrayList();
пытаться {
Итератор i = кэшMap.entrySet().iterator();
в то время как (i.hasNext()) {
запись java.util.Map.Entry = (java.util.Map.Entry) i.next();
a.add((String) enter.getKey());
}
} catch (Исключение ex) {} наконец {
вернуть а;
}
}
//Получаем имя значения ключа указанного типа в объекте кэша
public static ArrayList<String> getCacheListkey (тип String) {
ArrayList a = новый ArrayList();
Строковый ключ;
пытаться {
Итератор i = кэшMap.entrySet().iterator();
в то время как (i.hasNext()) {
запись java.util.Map.Entry = (java.util.Map.Entry) i.next();
ключ = (Строка) вход.getKey();
if (key.indexOf(type) != -1) {
a.add(ключ);
}
}
} catch (Исключение ex) {} наконец {
вернуть а;
}
}
}
пакет lhm.hcy.guge.frameset.cache;
/**
* <p>Название: </p>
*
* <p>Описание: Кэш DTO</p>
*
* <p>Авторское право: Copyright (c) 2008</p>
*
* <p>Компания: </p>
*
* @author Deepblue 11 ноября 2008 г.
* @версия 1.0
*/
Кэш публичного класса {
частный строковый ключ;//идентификатор кэша
значение частного объекта // данные кэша;
Private long timeOut;//время обновления
частное логическое значение истекло // стоит ли завершать работу
публичный кеш() {
супер();
}
public Cache (строковый ключ, значение объекта, долгое время ожидания, срок действия логического значения истек) {
this.key = ключ;
это.значение = значение;
this.timeOut = таймаут;
this.expired = срок действия истек;
}
публичная строка getKey() {
возвратный ключ;
}
общественный длинный getTimeOut() {
вернуть тайм-аут;
}
общедоступный объект getValue() {
возвращаемое значение;
}
public void setKey (String string) {
ключ = строка;
}
общественный недействительный setTimeOut (длинный l) {
таймаут = л;
}
public void setValue (объект объекта) {
значение = объект;
}
общедоступное логическое значение isExpired() {
срок возврата истек;
}
public void setExpired(boolean b) {
истек = б;
}
}
//Тестовый класс,
класс Тест {
public static void main(String[] args) {
System.out.println(CacheManager.getSimpleFlag("alksd"));
// CacheManager.putCache("abc", новый Cache());
// CacheManager.putCache("def", новый Cache());
// CacheManager.putCache("ccc", новый Cache());
// CacheManager.clearOnly("");
// Кэш c = новый Cache();
// for (int i = 0; i < 10; i++) {
// CacheManager.putCache("" + i, c);
// }
// CacheManager.putCache("ааааааа", c);
// CacheManager.putCache("abchcy;alskd", c);
// CacheManager.putCache("cccccccc", c);
// CacheManager.putCache("abcoqiwhcy", c);
// System.out.println("Размер до удаления: "+CacheManager.getCacheSize());
// CacheManager.getCacheAllkey();
// CacheManager.clearAll("аааа");
// System.out.println("Размер после удаления: "+CacheManager.getCacheSize());
// CacheManager.getCacheAllkey();
}
}
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/hello_zhenyu/archive/2009/12/18/5030366.aspx.