java Map实现的cache manager
来源:互联网 发布:python爬虫代码示例 编辑:程序博客网 时间:2024/06/13 13:44
原文:java 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,定时清除缓存起来的值
0 0
- java Map实现的cache manager
- java Map实现的cache manager
- 分享一个java Map实现的cache manager,定时清除缓存起来的值
- java Map实现的cache manager,定时清除缓存起来的值
- leetcode 146. LRU Cache 需要深入学习Java的Map的内部实现
- 使用Catalog或者ArcGIS Manager创建Map Cache(切片)
- Cache Manager
- Java实现cache的基本机制
- java实现简单的LRU Cache
- java实现清理DNS Cache的方法
- Java Map的底层实现
- Java -- Map的底层实现
- 用java实现cache
- 用java实现cache
- Java实现Cache功能
- LRU cache实现 (Java)
- LRU cache实现 (Java)
- Java 下实现Cache
- 第十六周 项目1验证算法-基数排序
- 单利模式
- 第十六周项目1-(3)验证算法冒泡排序
- 第十五周项目2-(2)用哈希法组织关键字
- ffmpeg 录屏命令
- java Map实现的cache manager
- Android 笔记:修改状态栏颜色(自定义状态栏颜色以与APP作风保持一致)
- Android中的动画
- LR-Linux/Unix-vmstat详解
- JDK1.8的HashMap源码分析
- codeforce 246 C
- 第16周项目1-验证算法(5)直接选择排序
- 分享第三方免费API接口数据
- easyui 下拉树组件combotree