首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

简略的缓存算法

2012-09-24 
简单的缓存算法一般的缓存都是以时间为过期条件,最近碰到业务,需要缓存在一个范围内,满了后,用新的替代旧

简单的缓存算法

一般的缓存都是以时间为过期条件,最近碰到业务,需要缓存在一个范围内,满了后,用新的替代旧的,这样就固定了缓存的容量,使容量可控;可能类似的缓存框架也有,但我自己写了个简单的程序来实现,以下的是算法测试程序,修改后可作为业务缓存使用;发出来请大家指正:

?

算法实现的业务为:

?????? 根据组名来进行缓存,方便管理,此方法可以在以cacheSize为一个圆上进行缓存和清除
??? ? ? 算法始终清除年龄最老的缓存对象,然后将新的对象存入清除区域,如此循环

CacheInfoCacheTest测试类

?

import java.io.File;import java.io.Serializable;import java.util.HashMap;import java.util.Map;/** * @description CacheInfoCacheTest * @author  *  * @date 2012-9-6 */public class CacheInfoCacheTest {private static Map cacheInfo = new HashMap();public static void setGroup(String key, String groupName, int cacheSize, int clearSize) {boolean ifinit = true;CacheInfo info = (CacheInfo) cacheInfo.get(groupName);if (info == null) {//可以先从缓存中获取,如果没有,则证明groupName是第一次缓存System.out.println("-----------get cacheInfo from file -------------");if (info == null) {info = new CacheInfo();cacheInfo.put(groupName, info);ifinit = false;}}if (cacheSize > 0)info.setCacheSize(cacheSize);if (clearSize > 0)info.setClearSize(clearSize);int curIndex = info.getCurIndex(); // 当前存入计数if(ifinit) curIndex++;Map keys = info.getKeys();if (keys != null && keys.containsValue(key)) {// 如果存在了,则直接覆盖System.out.println("---------add override " + groupName + "--" + key + "--cache");} else {// 如果不存在Integer pos = info.getClearIndex(); // 缓存清除索引Integer cacheCounter = info.getCacheCounter();// 缓存剩余计数//set(groupName + File.separator + key, serializable);System.out.println("---------add " + groupName + "--" + key + "--cache");if (keys != null && cacheCounter >= cacheSize) {clearSize = clearSize > cacheSize ? cacheSize : clearSize;for (int i = 0; i < clearSize; i++) {// 如果缓冲池已满,则填出clearSize的缓存System.out.println("---------remove clearSize cache" + pos%cacheSize +";key="+keys.get(groupName + pos % cacheSize));pos++;// 用来保存清除的位置cacheCounter--; // 用来计数缓存是否已满}info.setClearIndex(pos % cacheSize);}if (keys == null)keys = new HashMap();cacheCounter++;curIndex = curIndex % cacheSize;info.setCacheCounter(cacheCounter);info.setCurIndex(curIndex);keys.put(groupName+curIndex, key);info.setKeys(keys);System.out.println("put key=["+(groupName+curIndex)+","+key+"]");System.out.println("put counter=["+groupName+","+curIndex+"]");System.out.println("####################################################################");}}public static void main(String[] args){for(int i=0;i<53;i++){setGroup("key_"+i,"group",20,8);}}}

?

?CacheInfo类:

?

package com.study.cache;import java.util.Map;/** * @description CacheInfo * @author  *  * @date 2012-9-6 */public class CacheInfo implements java.io.Serializable{private int cacheSize=20;// 初始缓存容量private int clearSize=8;// 缓存满了以后,需要清除的容量private Map keys;private String group;private int curIndex;  //当前存入索引值private int clearIndex;//缓存清除索引值private int cacheCounter;//缓存剩余计数public int getCacheSize() {return cacheSize;}public void setCacheSize(int cacheSize) {this.cacheSize = cacheSize;}public int getClearSize() {return clearSize;}public void setClearSize(int clearSize) {this.clearSize = clearSize;}public Map getKeys() {return keys;}public void setKeys(Map keys) {this.keys = keys;}public String getGroup() {return group;}public void setGroup(String group) {this.group = group;}public int getCurIndex() {return curIndex;}public void setCurIndex(int curIndex) {this.curIndex = curIndex;}public int getClearIndex() {return clearIndex;}public void setClearIndex(int clearIndex) {this.clearIndex = clearIndex;}public int getCacheCounter() {return cacheCounter;}public void setCacheCounter(int cacheCounter) {this.cacheCounter = cacheCounter;}}

?

? 运行结果:

-----------get cacheInfo from file -------------
---------add group--key_0--cache
put key=[group0,key_0]
put counter=[group,0]
####################################################################
---------add group--key_1--cache
put key=[group1,key_1]
put counter=[group,1]
####################################################################
---------add group--key_2--cache
put key=[group2,key_2]
put counter=[group,2]
####################################################################
---------add group--key_3--cache
put key=[group3,key_3]
put counter=[group,3]
####################################################################
---------add group--key_4--cache
put key=[group4,key_4]
put counter=[group,4]
####################################################################
---------add group--key_5--cache
put key=[group5,key_5]
put counter=[group,5]
####################################################################
---------add group--key_6--cache
put key=[group6,key_6]
put counter=[group,6]
####################################################################
---------add group--key_7--cache
put key=[group7,key_7]
put counter=[group,7]
####################################################################
---------add group--key_8--cache
put key=[group8,key_8]
put counter=[group,8]
####################################################################
---------add group--key_9--cache
put key=[group9,key_9]
put counter=[group,9]
####################################################################
---------add group--key_10--cache
put key=[group10,key_10]
put counter=[group,10]
####################################################################
---------add group--key_11--cache
put key=[group11,key_11]
put counter=[group,11]
####################################################################
---------add group--key_12--cache
put key=[group12,key_12]
put counter=[group,12]
####################################################################
---------add group--key_13--cache
put key=[group13,key_13]
put counter=[group,13]
####################################################################
---------add group--key_14--cache
put key=[group14,key_14]
put counter=[group,14]
####################################################################
---------add group--key_15--cache
put key=[group15,key_15]
put counter=[group,15]
####################################################################
---------add group--key_16--cache
put key=[group16,key_16]
put counter=[group,16]
####################################################################
---------add group--key_17--cache
put key=[group17,key_17]
put counter=[group,17]
####################################################################
---------add group--key_18--cache
put key=[group18,key_18]
put counter=[group,18]
####################################################################
---------add group--key_19--cache
put key=[group19,key_19]
put counter=[group,19]
####################################################################
---------add group--key_20--cache
---------remove clearSize cache0;key=key_0
---------remove clearSize cache1;key=key_1
---------remove clearSize cache2;key=key_2
---------remove clearSize cache3;key=key_3
---------remove clearSize cache4;key=key_4
---------remove clearSize cache5;key=key_5
---------remove clearSize cache6;key=key_6
---------remove clearSize cache7;key=key_7
put key=[group0,key_20]
put counter=[group,0]
####################################################################
---------add group--key_21--cache
put key=[group1,key_21]
put counter=[group,1]
####################################################################
---------add group--key_22--cache
put key=[group2,key_22]
put counter=[group,2]
####################################################################
---------add group--key_23--cache
put key=[group3,key_23]
put counter=[group,3]
####################################################################
---------add group--key_24--cache
put key=[group4,key_24]
put counter=[group,4]
####################################################################
---------add group--key_25--cache
put key=[group5,key_25]
put counter=[group,5]
####################################################################
---------add group--key_26--cache
put key=[group6,key_26]
put counter=[group,6]
####################################################################
---------add group--key_27--cache
put key=[group7,key_27]
put counter=[group,7]
####################################################################
---------add group--key_28--cache
---------remove clearSize cache8;key=key_8
---------remove clearSize cache9;key=key_9
---------remove clearSize cache10;key=key_10
---------remove clearSize cache11;key=key_11
---------remove clearSize cache12;key=key_12
---------remove clearSize cache13;key=key_13
---------remove clearSize cache14;key=key_14
---------remove clearSize cache15;key=key_15
put key=[group8,key_28]
put counter=[group,8]
####################################################################
---------add group--key_29--cache
put key=[group9,key_29]
put counter=[group,9]
####################################################################
---------add group--key_30--cache
put key=[group10,key_30]
put counter=[group,10]
####################################################################
---------add group--key_31--cache
put key=[group11,key_31]
put counter=[group,11]
####################################################################
---------add group--key_32--cache
put key=[group12,key_32]
put counter=[group,12]
####################################################################
---------add group--key_33--cache
put key=[group13,key_33]
put counter=[group,13]
####################################################################
---------add group--key_34--cache
put key=[group14,key_34]
put counter=[group,14]
####################################################################
---------add group--key_35--cache
put key=[group15,key_35]
put counter=[group,15]
####################################################################
---------add group--key_36--cache
---------remove clearSize cache16;key=key_16
---------remove clearSize cache17;key=key_17
---------remove clearSize cache18;key=key_18
---------remove clearSize cache19;key=key_19
---------remove clearSize cache0;key=key_20
---------remove clearSize cache1;key=key_21
---------remove clearSize cache2;key=key_22
---------remove clearSize cache3;key=key_23
put key=[group16,key_36]
put counter=[group,16]
####################################################################
---------add group--key_37--cache
put key=[group17,key_37]
put counter=[group,17]
####################################################################
---------add group--key_38--cache
put key=[group18,key_38]
put counter=[group,18]
####################################################################
---------add group--key_39--cache
put key=[group19,key_39]
put counter=[group,19]
####################################################################
---------add group--key_40--cache
put key=[group0,key_40]
put counter=[group,0]
####################################################################
---------add group--key_41--cache
put key=[group1,key_41]
put counter=[group,1]
####################################################################
---------add group--key_42--cache
put key=[group2,key_42]
put counter=[group,2]
####################################################################
---------add group--key_43--cache
put key=[group3,key_43]
put counter=[group,3]
####################################################################
---------add group--key_44--cache
---------remove clearSize cache4;key=key_24
---------remove clearSize cache5;key=key_25
---------remove clearSize cache6;key=key_26
---------remove clearSize cache7;key=key_27
---------remove clearSize cache8;key=key_28
---------remove clearSize cache9;key=key_29
---------remove clearSize cache10;key=key_30
---------remove clearSize cache11;key=key_31
put key=[group4,key_44]
put counter=[group,4]
####################################################################
---------add group--key_45--cache
put key=[group5,key_45]
put counter=[group,5]
####################################################################
---------add group--key_46--cache
put key=[group6,key_46]
put counter=[group,6]
####################################################################
---------add group--key_47--cache
put key=[group7,key_47]
put counter=[group,7]
####################################################################
---------add group--key_48--cache
put key=[group8,key_48]
put counter=[group,8]
####################################################################
---------add group--key_49--cache
put key=[group9,key_49]
put counter=[group,9]
####################################################################
---------add group--key_50--cache
put key=[group10,key_50]
put counter=[group,10]
####################################################################
---------add group--key_51--cache
put key=[group11,key_51]
put counter=[group,11]
####################################################################
---------add group--key_52--cache
---------remove clearSize cache12;key=key_32
---------remove clearSize cache13;key=key_33
---------remove clearSize cache14;key=key_34
---------remove clearSize cache15;key=key_35
---------remove clearSize cache16;key=key_36
---------remove clearSize cache17;key=key_37
---------remove clearSize cache18;key=key_38
---------remove clearSize cache19;key=key_39
put key=[group12,key_52]
put counter=[group,12]
####################################################################

?

?

说明:每满20,则从最先存入的那个对象开始,清除8个对象空间,供新的对象进行缓存;(最先对象是动态变化的),? 抛砖引玉,希望有更好的算法!

热点排行