diff --git a/src/main/java/osc/git/eh3/cache/Cache.java b/src/main/java/osc/git/eh3/cache/Cache.java new file mode 100644 index 0000000..6b9128d --- /dev/null +++ b/src/main/java/osc/git/eh3/cache/Cache.java @@ -0,0 +1,71 @@ +package osc.git.eh3.cache; + +/** + *

+ * Title: + *

+ * + *

+ * Description: 缓存DTO + *

+ * + *

+ * Copyright: Copyright (c) 2008 + *

+ * + *

+ * Company: + *

+ * + * @author Deepblue 2008-11-11 + * @version 1.0 + */ +public class Cache { + private String key;// 缓存ID + private Object value;// 缓存数据 + private long timeOut;// 更新时间 + private boolean expired; // 是否终止 + + public Cache() { + super(); + } + + public Cache(String key, Object value, long timeOut, boolean expired) { + this.key = key; + this.value = value; + this.timeOut = timeOut; + this.expired = expired; + } + + public String getKey() { + return key; + } + + public long getTimeOut() { + return timeOut; + } + + public Object getValue() { + return value; + } + + public void setKey(String string) { + key = string; + } + + public void setTimeOut(long l) { + timeOut = l; + } + + public void setValue(Object object) { + value = object; + } + + public boolean isExpired() { + return expired; + } + + public void setExpired(boolean b) { + expired = b; + } +} \ No newline at end of file diff --git a/src/main/java/osc/git/eh3/cache/CacheManager.java b/src/main/java/osc/git/eh3/cache/CacheManager.java new file mode 100644 index 0000000..542a065 --- /dev/null +++ b/src/main/java/osc/git/eh3/cache/CacheManager.java @@ -0,0 +1,220 @@ +package osc.git.eh3.cache; + +import java.util.*; +import java.util.Map.Entry; + +/** + *

+ * Title: + *

+ * + *

+ * Description: 管理缓存 + *

+ * Deep blue 2008-11-28 think + * 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间 + *

+ * Copyright: Copyright (c) 2008 + *

+ * + *

+ * Company: + *

+ * + * @author Deepblue 2008-11-11 + * @version 1.0 + */ +public class CacheManager { + private static HashMap cacheMap = new HashMap(); + + // 单实例构造方法 + private CacheManager() { + super(); + } + + // 获取布尔值的缓存 + public static boolean getSimpleFlag(String key) { + try { + return (Boolean) cacheMap.get(key); + } catch (NullPointerException e) { + return false; + } + } + + public static long getServerStartdt(String key) { + try { + return (Long) cacheMap.get(key); + } catch (Exception ex) { + return 0; + } + } + + // 设置布尔值的缓存 + public synchronized static boolean setSimpleFlag(String key, boolean flag) { + if (flag && getSimpleFlag(key)) {// 假如为真不允许被覆盖 + return false; + } else { + cacheMap.put(key, flag); + return true; + } + } + + public synchronized static boolean setSimpleFlag(String key, long serverbegrundt) { + if (cacheMap.get(key) == null) { + cacheMap.put(key, serverbegrundt); + return true; + } else { + return false; + } + } + + // 得到缓存。同步静态方法 + private synchronized static Cache getCache(String key) { + return (Cache) cacheMap.get(key); + } + + // 判断是否存在一个缓存 + private synchronized static boolean hasCache(String key) { + return cacheMap.containsKey(key); + } + + // 清除所有缓存 + public synchronized static void clearAll() { + cacheMap.clear(); + } + + // 清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配 + public synchronized static void clearAll(String type) { + Iterator> i = cacheMap.entrySet().iterator(); + String key; + ArrayList arr = new ArrayList(); + try { + while (i.hasNext()) { + Entry entry = i.next(); + key = (String) entry.getKey(); + if (key.startsWith(type)) { // 如果匹配则删除掉 + arr.add(key); + } + } + for (int k = 0; k < arr.size(); k++) { + clearOnly(arr.get(k)); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + // 清除指定的缓存 + public synchronized static void clearOnly(String key) { + cacheMap.remove(key); + } + + // 载入缓存 + public synchronized static void putCache(String key, Cache obj) { + cacheMap.put(key, obj); + } + + // 获取缓存信息 + public static Cache getCacheInfo(String key) { + if (hasCache(key)) { + Cache cache = getCache(key); + if (cacheExpired(cache)) { // 调用判断是否终止方法 + cache.setExpired(true); + } + return cache; + } else { + return null; + } + } + + // 载入缓存信息 + public static void putCacheInfo(String key, Cache obj, long dt, boolean expired) { + Cache cache = new Cache(); + cache.setKey(key); + cache.setTimeOut(dt + System.currentTimeMillis()); // 设置多久后更新缓存 + cache.setValue(obj); + cache.setExpired(expired); // 缓存默认载入时,终止状态为FALSE + cacheMap.put(key, cache); + } + + // 重写载入缓存信息方法 + public static void putCacheInfo(String key, Cache obj, long dt) { + Cache cache = new Cache(); + cache.setKey(key); + cache.setTimeOut(dt + System.currentTimeMillis()); + cache.setValue(obj); + cache.setExpired(false); + cacheMap.put(key, cache); + } + + // 判断缓存是否终止 + public static boolean cacheExpired(Cache cache) { + if (null == cache) { // 传入的缓存不存在 + return false; + } + long nowDt = System.currentTimeMillis(); // 系统当前的毫秒数 + long cacheDt = cache.getTimeOut(); // 缓存内的过期毫秒数 + if (cacheDt <= 0 || cacheDt > nowDt) { // 过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE + return false; + } else { // 大于过期时间 即过期 + return true; + } + } + + // 获取缓存中的大小 + public static int getCacheSize() { + return cacheMap.size(); + } + + // 获取指定的类型的大小 + public static int getCacheSize(String type) { + int k = 0; + Iterator> i = cacheMap.entrySet().iterator(); + String key; + try { + while (i.hasNext()) { + Entry entry = i.next(); + key = (String) entry.getKey(); + if (key.indexOf(type) != -1) { // 如果匹配则删除掉 + k++; + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + return k; + } + + // 获取缓存对象中的所有键值名称 + public static ArrayList getCacheAllkey() { + ArrayList a = new ArrayList(); + try { + Iterator> i = cacheMap.entrySet().iterator(); + while (i.hasNext()) { + Entry entry = i.next(); + a.add((String) entry.getKey()); + } + } catch (Exception ex) { + } + return a; + } + + // 获取缓存对象中指定类型 的键值名称 + public static ArrayList getCacheListkey(String type) { + ArrayList a = new ArrayList(); + String key; + try { + Iterator> i = cacheMap.entrySet().iterator(); + while (i.hasNext()) { + Entry entry = i.next(); + key = (String) entry.getKey(); + if (key.indexOf(type) != -1) { + a.add(key); + } + } + } catch (Exception ex) { + } + return a; + } +} \ No newline at end of file diff --git a/src/main/java/osc/git/eh3/cache/SimpleCache.java b/src/main/java/osc/git/eh3/cache/SimpleCache.java new file mode 100644 index 0000000..33c5cd2 --- /dev/null +++ b/src/main/java/osc/git/eh3/cache/SimpleCache.java @@ -0,0 +1,50 @@ +package osc.git.eh3.cache; + +import java.util.Map; +import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class SimpleCache { + + private final Lock lock = new ReentrantLock(); + private final int maxCapacity; + private final Map eden; + private final Map perm; + + public SimpleCache(int maxCapacity) { + this.maxCapacity = maxCapacity; + this.eden = new ConcurrentHashMap(maxCapacity); + this.perm = new WeakHashMap(maxCapacity); + } + + public V get(K k) { + V v = this.eden.get(k); + if (v == null) { + lock.lock(); + try { + v = this.perm.get(k); + } finally { + lock.unlock(); + } + if (v != null) { + this.eden.put(k, v); + } + } + return v; + } + + public void put(K k, V v) { + if (this.eden.size() >= maxCapacity) { + lock.lock(); + try { + this.perm.putAll(this.eden); + } finally { + lock.unlock(); + } + this.eden.clear(); + } + this.eden.put(k, v); + } +} \ No newline at end of file diff --git a/src/main/java/osc/git/eh3/cache/Test.java b/src/main/java/osc/git/eh3/cache/Test.java new file mode 100644 index 0000000..cce6835 --- /dev/null +++ b/src/main/java/osc/git/eh3/cache/Test.java @@ -0,0 +1,17 @@ +package osc.git.eh3.cache; + +public class Test { + + public static void main(String[] args) { + SimpleCache cache = new SimpleCache<>(5); + + for (int i = 0; i < 10; i++) { + cache.put(""+i, i); + } + + for (int i = 0; i < 10; i++) { + + System.out.println(cache.get(i+"")); + } + } +} diff --git a/src/main/java/osc/git/eh3/cache/TestCache.java b/src/main/java/osc/git/eh3/cache/TestCache.java new file mode 100644 index 0000000..0d3f3f0 --- /dev/null +++ b/src/main/java/osc/git/eh3/cache/TestCache.java @@ -0,0 +1,32 @@ +package osc.git.eh3.cache; + +import java.util.ArrayList; + +public class TestCache { + public static void main(String[] args) { + System.out.println(CacheManager.getSimpleFlag("alksd")); + CacheManager.putCache("abc", new Cache("key", "value", 10, false)); + CacheManager.putCache("def", new Cache()); + CacheManager.putCache("ccc", new Cache()); + CacheManager.clearOnly(""); + Cache 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()); + ArrayList cacheAllkey = CacheManager.getCacheAllkey(); + for (String key : cacheAllkey) { + System.out.println(key + ":" + CacheManager.getCacheInfo(key).getValue()); + } + CacheManager.clearAll("aaaa"); + System.out.println("删除后的大小:" + CacheManager.getCacheSize()); + cacheAllkey = CacheManager.getCacheAllkey(); + for (String key : cacheAllkey) { + System.out.println(key); + } + } +} diff --git a/src/main/java/osc/git/eh3/test/TestAudiQ2.java b/src/main/java/osc/git/eh3/test/TestAudiQ2.java new file mode 100644 index 0000000..7bf5e0e --- /dev/null +++ b/src/main/java/osc/git/eh3/test/TestAudiQ2.java @@ -0,0 +1,11 @@ +package osc.git.eh3.test; + +import osc.git.eh3.utils.HttpClientUtil; + +public class TestAudiQ2 { + public static String URL = "http://127.0.0.1:8080/Audi2016Q2Wap/getUserInfo"; + + public static void main(String[] args) throws Exception { + System.out.println(HttpClientUtil.sendPostJSONData(URL, "")); + } +} diff --git a/src/main/java/osc/git/eh3/testminisite/TestMinisite.java b/src/main/java/osc/git/eh3/testminisite/TestMinisite.java new file mode 100644 index 0000000..2c9d2fe --- /dev/null +++ b/src/main/java/osc/git/eh3/testminisite/TestMinisite.java @@ -0,0 +1,34 @@ +package osc.git.eh3.testminisite; + +import java.util.HashMap; +import java.util.Map; + +import osc.git.eh3.utils.HttpClientUtil; + +public class TestMinisite { + public static String URL = "http://127.0.0.1:8080/dsp-minisite/Audi2016Q2/getProvinces"; + + public static void main(String[] args) throws Exception { + Map params = new HashMap<>(); + params.put("project","1"); + params.put("bid","1"); + params.put("mapid","1"); + params.put("name","1"); + params.put("gender","1"); + params.put("tel","1"); + params.put("favoriteModel","1"); + params.put("province","1"); + params.put("city","1"); + params.put("dealerName","1"); + params.put("dealerCode","1"); + params.put("scheduledTime","1"); + params.put("budget","1"); + + params.put("provinceName","北京"); + params.put("cityName","北京"); + +// System.out.println(HttpClientUtil.sendPostParam(URL, params)); + System.out.println(HttpClientUtil.sendGet(URL)); + } + +}