当前位置: 首页 > 科技观察

Java中常用的缓存机制的实现

时间:2023-03-12 06:50:28 科技观察

Cache所谓缓存就是将程序或系统经常调用的对象存放在内存中,再次使用时可以快速调用,无需创建新的重复实例。这样做可以减少系统开销,提高系统效率。缓存主要可以分为两类:1.通过文件缓存,顾名思义,文件缓存是指将数据存储在磁盘上,无论你使用的是XML格式,序列化文件DAT格式还是其他文件格式;2.内存缓存,也就是在类中实现一个静态的Map,对这个Map进行定时的增删改查。代码如下:packagelhm.hcy.guge.frameset.cache;导入java.util.*;//描述:管理缓存//可扩展功能:当chche达到内存溢出时,必须清除一些最早的缓存对象,这需要节省每个缓存对象的创建时间publicclassCacheManager{privatestaticHashMapcacheMap=newHashMap();//单实例构造方法privateCacheManager(){super();}//获取布尔缓存publicstaticbooleangetSimpleFlag(Stringkey){try{return(Boolean)cacheMap.get(key);}catch(NullPointerExceptione){returnfalse;}}publicstaticlonggetServerStartdt(Stringkey){try{return(Long)cacheMap.get(key);}catch(Exceptionex){return0;}}//设置布尔缓存publicsynchronizedstaticbooleansetSimpleFlag(Stringkey,booleanflag){if(flag&&getSimpleFlag(key)){//如果是true,不允许被覆盖(key,serverbegrundt);returntrue;}else{returnfalse;}}//G等缓存。同步静态方法privatesynchronizedstaticCachegetCache(Stringkey){return(Cache)cacheMap.get(key);}//判断是否有缓存privatesynchronizedstaticbooleanhasCache(Stringkey){returncacheMap.containsKey(key);}//清除所有缓存publicsynchronizedstaticvoidclearAll(){cacheMap.clear();}//清除某个类型的具体缓存,通过遍历HASHMAP下的所有对象,判断其KEY是否匹配传入的TYPEpublicsynchronizedstaticvoidclearAll(Stringtype){Iteratori=cacheMap.entrySet().iterator();Stringkey;ArrayListarr=newArrayList();try{while(i.hasNext()){java.util.Map.Entryentry=(java.util.Map.Entry)i.next();key=(String)entry.getKey();if(key.startsWith(type)){//匹配则删除arr.add(key);}}for(intk=0;knowDt){//当过期时间小于等于0,或过期时间大于当前时间时,为FALSEreturnfalse;}else{//如果大于过期时间,则过期returntrue;}}//获取缓存中的大小publicstaticintgetCacheSize(){returncacheMap.size();}//获取指定类型的大小publicstaticintgetCacheSize(Stringtype){intk=0;Iteratori=cacheMap.entrySet().iterator();Stringkey;try{while(i.hasNext()){java.util.Map.Entryentry=(java.util.Map.Entry)i.next();key=(String)entry.getKey();if(key.indexOf(type)!=-1){//匹配到则删除k++;}}}catch(Exceptionex){ex.printStackTrace();}returnk;}//获取缓存对象中的所有key-value名称publicstaticArrayListgetCacheAllkey(){ArrayLista=newArrayList();try{Iteratori=cacheMap.entrySet().iterator();while(i.hasNext()){java.util.Map.Entryentry=(java.util.Map.Entry)i.next();a.add((String)entry.getKey());}}catch(Exceptionex){}最后{return;}}//获取缓存对象中指定类型的键值名称publicstaticArrayListgetCacheListkey(Stringtype){ArrayLista=newArrayList();Stringkey;try{Iteratori=cacheMap.entrySet().iterator();while(i.hasNext()){java.util.Map.Entryentry=(java.util.Map.Entry)i.next();key=(String)entry.getKey();if(key.indexOf(type)!=-1){a.add(key);}}}catch(Exceptionex){}finally{returna;}}}packagelhm.hcy.guge.frameset.cache;publicclassCache{privateStringkey;//缓存IDprivateObjectvalue;//存储数据privatelongtimeOut;//更新时间privatebooleanexpired;//是否终止publicCache(){super();}publicCache(Stringkey,Objectvalue,longtimeOut,booleanexpired){this.key=key;this.value=value;this.timeOut=timeOut;this.expired=expired;}publicStringgetKey(){returnkey;}publiclonggetTimeOut(){returntimeOut;}publicObjectgetValue(){returnvalue;}publicvoidsetKey(Stringstring){key=string;}publicvoidsetTimeOut(longl){timeOut=l;}publicvoidsetValue(Objectobject){value=object;}publicbooleanisExpired(){returnexpired;}publicvoidsetExpired(booleanb){expired=b;}}//测试类,classTest{publicstaticvoidmain(String[]args){System.out.println(CacheManager.getSimpleFlag("alksd"));//CacheManager.putCache("abc",newCache());//CacheManager.putCache("def",newCache());//CacheManager.putCache("ccc",newCache());//CacheManager.clearOnly("");//Cachec=newCache();//for(inti=0;i<10;i++){//CacheManager.putCache(""+i,c);////缓存Mmanager.putCache("aaaaaaaa",c);//CacheManager.putCache("abchcy;alskd",c);//CacheManager.putCache("cccccccc",c);//CacheManager.putCache("abcoqiwhcy",c);//System.out.println("删除前的大小:"+CacheManager.getCacheSize());//CacheManager.getCacheAllkey();//CacheManager.clearAll("aaaa");//System.out.println("删除的大小:"+CacheManager.getCacheSize());//CacheManager.getCacheAllkey();}}