简单实现自定义 Java 缓存

简单实现自定义 Java 缓存


package com.itmayiedu; public class Cache { public Cache(String key, Object value, Long timeOut) { super(); this.key = key; this.value = value; this.timeOut = timeOut; } public Cache() { } /** * key */ private String key; /** * 缓存数据 */ private Object value; /** * 超时时间 */ private Long timeOut; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public Long getTimeOut() { return timeOut; } public void setTimeOut(Long timeOut) { this.timeOut = timeOut; } }

package com.itmayiedu; import java.util.HashMap; import java.util.Map; /** * * @classDesc: 功能描述:(缓存map) * @author: 余胜军 * @createTime: 2017年9月1日 下午3:19:24 * @version: v1.0 * @copyright:上海每特教育科技有限公司 */ public class CacheManager { private Map<String, Cache> cacheMap = new HashMap<>(); /** * * @methodDesc: 功能描述:(往缓存存值) * @author: 余胜军 * @param: @param * key * @param: @param * oj * @createTime:2017年9月1日 下午3:20:58 * @returnType:@param key * @returnType:@param oj void * @copyright:上海每特教育科技有限公司 */ public void put(String key, Object oj) { put(key, oj, null); } /** * * @methodDesc: 功能描述:(往缓存存值) * @author: 余胜军 * @param: @param * key * @param: @param * oj * @createTime:2017年9月1日 下午3:20:58 * @returnType:@param key * @returnType:@param oj void * @copyright:上海每特教育科技有限公司 */ public synchronized void put(String key, Object oj, Long timeOut) { if (oj == null) { return; } Cache cache = new Cache(); cache.setKey(key); if (timeOut != null) cache.setTimeOut(timeOut + System.currentTimeMillis()); cache.setValue(oj); cacheMap.put(key, cache); } /** * * @methodDesc: 功能描述:(删除) * @author: 余胜军 * @param: @param * key * @createTime:2017年9月1日 下午3:26:54 * @returnType:@param key void * @copyright:上海每特教育科技有限公司 */ public synchronized void deleteCache(String key) { cacheMap.remove(key); } /** * * @methodDesc: 功能描述:(获取缓存中数据) * @author: 余胜军 * @param: @param * key * @param: @return * @createTime:2017年9月1日 下午3:24:03 * @returnType:@param key * @returnType:@return Cache * @copyright:上海每特教育科技有限公司 */ public synchronized Object get(String key) { Cache cache = cacheMap.get(key); Object oj = null; if (cache != null) { oj = cache.getValue(); } return oj; } /** * * @methodDesc: 功能描述:(检查数据是否在有效期内) * @author: 余胜军 * @param: * @createTime:2017年9月1日 下午3:25:21 * @returnType: void * @copyright:上海每特教育科技有限公司 */ public void checkValidityData() { for (String key : cacheMap.keySet()) { Cache cache = cacheMap.get(key); Long timeOut = cache.getTimeOut(); if (timeOut == null) { return; } long currentTime = System.currentTimeMillis(); long endTime = timeOut; long result = (currentTime - endTime); if (result > 0) { cacheMap.remove(key); } } } public static void main(String[] args) throws InterruptedException { CacheManager cacheManager = new CacheManager(); // cacheManager.put("lisi", 0); cacheManager.put("zhangsan", "jj", 5000l); Thread.sleep(5000); cacheManager.checkValidityData(); System.out.println(cacheManager.get("zhangsan")); } }