所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。
缓存主要可分为二大类:
一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;
二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.
代码如下:
1.packagelhm.hcy.guge.frameset.cache;
2.
3.importjava.util.*;
4.
5.//Description:管理缓存
6.
7.//可扩展的功能:当chche到内存溢出时必须清除掉早期的一些缓存对象,这就要求对每个缓存对象保存创建时间
8.
9.publicclassCacheManager{
10.privatestaticHashMapcacheMap=newHashMap();
11.
12.//单实例构造方法
13.privateCacheManager(){
14.super();
15.}
16.//获取布尔值的缓存
17.publicstaticbooleangetSimpleFlag(Stringkey){
18.try{
19.return(Boolean)cacheMap.get(key);
20.}catch(NullPointerExceptione){
21.returnfalse;
22.}
23.}
24.publicstaticlonggetServerStartdt(Stringkey){
25.try{
26.return(Long)cacheMap.get(key);
27.}catch(Exceptionex){
28.return0;
29.}
30.}
31.//设置布尔值的缓存
32.publicsynchronizedstaticbooleansetSimpleFlag(Stringkey,booleanflag){
33.if(flag&&getSimpleFlag(key)){//假如为真不允许被覆盖
34.returnfalse;
35.}else{
36.cacheMap.put(key,flag);
37.returntrue;
38.}
39.}
40.publicsynchronizedstaticbooleansetSimpleFlag(Stringkey,longserverbegrundt){
41.if(cacheMap.get(key)==null){
42.cacheMap.put(key,serverbegrundt);
43.returntrue;
44.}else{
45.returnfalse;
46.}
47.}
48.
49.
50.//得到缓存。同步静态方法
51.privatesynchronizedstaticCachegetCache(Stringkey){
52.return(Cache)cacheMap.get(key);
53.}
54.
55.//判断是否存在一个缓存
56.privatesynchronizedstaticbooleanhasCache(Stringkey){
57.returncacheMap.containsKey(key);
58.}
59.
60.//清除所有缓存
61.publicsynchronizedstaticvoidclearAll(){
62.cacheMap.clear();
63.}
64.
65.//清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配
66.publicsynchronizedstaticvoidclearAll(Stringtype){
67.Iteratori=cacheMap.entrySet().iterator();
68.Stringkey;
69.ArrayListarr=newArrayList();
70.try{
71.while(i.hasNext()){
72.java.util.Map.Entryentry=(java.util.Map.Entry)i.next();
73.key=(String)entry.getKey();
74.if(key.startsWith(type)){//如果匹配则删除掉
75.arr.add(key);
76.}
77.}
78.for(intk=0;k<arr.size();k++){
79.clearOnly(arr.get(k));
80.}
81.}catch(Exceptionex){
82.ex.printStackTrace();
83.}
84.}
85.
86.//清除指定的缓存
87.publicsynchronizedstaticvoidclearOnly(Stringkey){
88.cacheMap.remove(key);
89.}
90.
91.//载入缓存
92.publicsynchronizedstaticvoidputCache(Stringkey,Cacheobj){
93.cacheMap.put(key,obj);
94.}
95.
96.//获取缓存信息
97.publicstaticCachegetCacheInfo(Stringkey){
98.
99.if(hasCache(key)){
100.Cachecache=getCache(key);
101.if(cacheExpired(cache)){//调用判断是否终止方法
102.cache.setExpired(true);
103.}
104.returncache;
105.}else
106.returnnull;
107.}
108.
109.//载入缓存信息
110.publicstaticvoidputCacheInfo(Stringkey,Cacheobj,longdt,booleanexpired){
111.Cachecache=newCache();
112.cache.setKey(key);
113.cache.setTimeOut(dt+System.currentTimeMillis());//设置多久后更新缓存
114.cache.setValue(obj);
115.cache.setExpired(expired);//缓存默认载入时,终止状态为FALSE
116.cacheMap.put(key,cache);
117.}
118.//重写载入缓存信息方法
119.publicstaticvoidputCacheInfo(Stringkey,Cacheobj,longdt){
120.Cachecache=newCache();
121.cache.setKey(key);
122.cache.setTimeOut(dt+System.currentTimeMillis());
123.cache.setValue(obj);
124.cache.setExpired(false);
125.cacheMap.put(key,cache);
126.}
127.
128.//判断缓存是否终止
129.publicstaticbooleancacheExpired(Cachecache){
130.if(null==cache){//传入的缓存不存在
131.returnfalse;
132.}
133.longnowDt=System.currentTimeMillis();//系统当前的毫秒数
134.longcacheDt=cache.getTimeOut();//缓存内的过期毫秒数
135.if(cacheDt<=0||cacheDt>nowDt){//过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE
136.returnfalse;
137.}else{//大于过期时间即过期
138.returntrue;
139.}
140.}
141.
142.//获取缓存中的大小
143.publicstaticintgetCacheSize(){
144.returncacheMap.size();
145.}
146.
147.//获取指定的类型的大小
148.publicstaticintgetCacheSize(Stringtype){
149.intk=0;
150.Iteratori=cacheMap.entrySet().iterator();
151.Stringkey;
152.try{
153.while(i.hasNext()){
154.java.util.Map.Entryentry=(java.util.Map.Entry)i.next();
155.key=(String)entry.getKey();
156.if(key.indexOf(type)!=-1){//如果匹配则删除掉
157.k++;
158.}
159.}
160.}catch(Exceptionex){
161.ex.printStackTrace();
162.}
163.
164.returnk;
165.}
166.
167.//获取缓存对象中的所有键值名称
168.publicstaticArrayListgetCacheAllkey(){
169.ArrayLista=newArrayList();
170.try{
171.Iteratori=cacheMap.entrySet().iterator();
172.while(i.hasNext()){
173.java.util.Map.Entryentry=(java.util.Map.Entry)i.next();
174.a.add((String)entry.getKey());
175.}
176.}catch(Exceptionex){}finally{
177.returna;
178.}
179.}
180.
181.//获取缓存对象中指定类型的键值名称
182.publicstaticArrayListgetCacheListkey(Stringtype){
183.ArrayLista=newArrayList();
184.Stringkey;
185.try{
186.Iteratori=cacheMap.entrySet().iterator();
187.while(i.hasNext()){
188.java.util.Map.Entryentry=(java.util.Map.Entry)i.next();
189.key=(String)entry.getKey();
190.if(key.indexOf(type)!=-1){
191.a.add(key);
192.}
193.}
194.}catch(Exceptionex){}finally{
195.returna;
196.}
197.}
198.
199.}
200.
201.
202.packagelhm.hcy.guge.frameset.cache;
203.
204.publicclassCache{
205.privateStringkey;//缓存ID
206.privateObjectvalue;//缓存数据
207.privatelongtimeOut;//更新时间
208.privatebooleanexpired;//是否终止
209.publicCache(){
210.super();
211.}
212.
213.publicCache(Stringkey,Objectvalue,longtimeOut,booleanexpired){
214.this.key=key;
215.this.value=value;
216.this.timeOut=timeOut;
217.this.expired=expired;
218.}
219.
220.publicStringgetKey(){
221.returnkey;
222.}
223.
224.publiclonggetTimeOut(){
225.returntimeOut;
226.}
227.
228.publicObjectgetValue(){
229.returnvalue;
230.}
231.
232.publicvoidsetKey(Stringstring){
233.key=string;
234.}
235.
236.publicvoidsetTimeOut(longl){
237.timeOut=l;
238.}
239.
240.publicvoidsetValue(Objectobject){
241.value=object;
242.}
243.
244.publicbooleanisExpired(){
245.returnexpired;
246.}
247.
248.publicvoidsetExpired(booleanb){
249.expired=b;
250.}
251.}
252.
253.//测试类,
254.classTest{
255.publicstaticvoidmain(String[]args){
256.System.out.println(CacheManager.getSimpleFlag("alksd"));
257.//CacheManager.putCache("abc",newCache());
258.//CacheManager.putCache("def",newCache());
259.//CacheManager.putCache("ccc",newCache());
260.//CacheManager.clearOnly("");
261.//Cachec=newCache();
262.//for(inti=0;i<10;i++){
263.//CacheManager.putCache(""+i,c);
264.//}
265.//CacheManager.putCache("aaaaaaaa",c);
266.//CacheManager.putCache("abchcy;alskd",c);
267.//CacheManager.putCache("cccccccc",c);
268.//CacheManager.putCache("abcoqiwhcy",c);
269.//System.out.println("删除前的大小:"+CacheManager.getCacheSize());
270.//CacheManager.getCacheAllkey();
271.//CacheManager.clearAll("aaaa");
272.//System.out.println("删除后的大小:"+CacheManager.getCacheSize());
273.//CacheManager.getCacheAllkey();.
274.}
275.}
知识讲解的怎么样,对作为的你们有没有帮助?如果你们有好的干货分享,可以关注极悦的官方微信,来和动宝儿取得联系哟。