java Map实现的cache manager
2016-12-16 10:22
375 查看
原文:java
Map实现的cache manager
源代码下载地址:http://www.zuidaima.com/share/1883261710420992.htm
一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象;
突然想到就搞出来了,具体好像也没有什么用......汗
更新:
感谢牛大大的提醒,老的代理确实存在线程方面的问题,下面是更新的版本,老的版本放入到附件中了
官方验证:
这个cache实现和该代码类似,但存在线程安全问题
分享一个Map,定时清除缓存起来的值
Map实现的cache manager
源代码下载地址:http://www.zuidaima.com/share/1883261710420992.htm
一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象;
突然想到就搞出来了,具体好像也没有什么用......汗
更新:
感谢牛大大的提醒,老的代理确实存在线程方面的问题,下面是更新的版本,老的版本放入到附件中了
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.concurrent.ConcurrentHashMap; import java.util.Map; /** * java Map cache manager 改进版 * 特点:无线程,取出时判断过期,系列化实现的深度克隆,覆盖原则 * 问题: 线程安全,克隆带来的时效损耗 * @author frank * */ public class VirtualCache{ /** * 开发模式 */ private boolean isdev = false; private static String ERROR_SET = "VirtualCache缓存数据异常:key="; private static String ERROR_GET= "VirtualCache取出数据异常:key="; /** * 虚拟缓存 */ private Map<String,Object> cache = new ConcurrentHashMap<String, Object>(); /** * 过期时间 */ private Map<String,Long> tasks = new ConcurrentHashMap<String,Long>(); public VirtualCache(boolean isdev){ this.isdev = isdev; } public VirtualCache(){ } /** * 深度克隆 */ private Object clone(String key,Object obj,boolean isSet){ if(obj == null) return null; ByteArrayOutputStream bo = null; ObjectOutputStream oo = null; ByteArrayInputStream bi = null; ObjectInputStream oi = null; Object value = null; try { bo=new ByteArrayOutputStream(); oo = new ObjectOutputStream(bo); oo.writeObject(obj); bi=new ByteArrayInputStream(bo.toByteArray()); oi=new ObjectInputStream(bi); value = oi.readObject(); } catch (Exception e) { this.printError(e, key,isSet); } finally{ if(oo != null) try { oo.close(); } catch (Exception e) { this.printError(e, key,isSet); } if(oi != null) try { oi.close(); } catch (Exception e) { this.printError(e, key,isSet); } } return value; } /** * 日志输出 */ private void printError(Exception e,String key,boolean isSet){ if(isSet) System.err.println(ERROR_SET + key); else System.err.println(ERROR_GET + key); if(this.isdev) e.printStackTrace(); } /** * 存入缓存 */ public void set(String key,Object value,long timeout){ this.delete(key); this.cache.put(key, this.clone(key,value,true)); if(timeout > 0l) this.tasks.put(key,timeout*1000l + System.currentTimeMillis()); } /** * 获取缓存 */ public Object get(String key){ Long timeout = this.tasks.get(key); if(timeout != null && timeout <= System.currentTimeMillis()) this.delete(key); return this.clone(key,this.cache.get(key),false); } /** * 删除缓存 */ public void delete(String key){ this.cache.remove(key); this.tasks.remove(key); } }
官方验证:
这个cache实现和该代码类似,但存在线程安全问题
分享一个Map,定时清除缓存起来的值
相关文章推荐
- java Map实现的cache manager
- java Map实现的cache manager
- 分享一个java Map实现的cache manager,定时清除缓存起来的值
- java Map实现的cache manager,定时清除缓存起来的值
- javaScript实现类似java的Map(没有映射)
- js实现javaMap的功能 根据json的key获取json的key对应的值
- Java通过google map api实现地址解析的方法
- Java中常用数据结构的实现类 Collection和Map
- Java中常用数据结构的实现类 Collection和Map
- JS实现JAVA的Map
- JAVA用List实现Map的基本功能
- javascript实现的java里的Map对象
- Map实现字符串内重复字符数的计算(Java之二)
- ajax和json跟java实现List、Map直接传递
- java 自己实现的简单Map
- javascript 实现的类似于java里的Map对象
- Java实现将Map转换为List的小代码
- javascript实现的java里的Map对象
- JavaScript中实现类似Java中的Map对象
- 2.当形参,返回值类型不是JavaBean式的复合类,Map时,CXF无法处理:服务器实现类