<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    可定制生命周期的緩存

    1) ICache.java 緩存接口

    package com.jgao.cache;

    /**
     * 緩存接口
     * 
    @author jgao
     *
     
    */

    public interface ICache {
        
        
    public static int Forever = -1//緩存中對象生命周期的結束標志

        
    /**
         * 判斷緩存中的對象是否存在
         * 
    @param key
         * 
    @return
         
    */

        
    boolean contains(String key);
        
        
    /**
         * 獲取緩存中的對象
         * 
    @param key 對象名稱
         * 
    @return
         
    */

        Object get(String key);

        
    /**
         * 向緩存中插入對象
         * 
    @param key 對象名稱
         * 
    @param obj 對象
         * 
    @param slidingExpiration 對象在緩存中存在的時間
         
    */

        
    void Insert(String key, Object obj, int slidingExpiration);

        
    /**
         * 
         * 向緩存中添加對象,并返回該對象
         * 
    @param key 對象名稱
         * 
    @param obj 對象
         * 
    @param slidingExpiration 對象在緩存中存在的時間
         * 
    @return
         
    */

        Object Add(String key, Object obj, 
    int slidingExpiration);
        
        
    /**
         * 移除緩存中的對象
         * 
    @param key 對象名稱
         * 
    @return
         
    */

        Object Remove(String key);
    }

    2) DefaultCache.java 默認緩存
    package com.jgao.cache;

    import java.util.*;

    /**
     * 系統默認的緩存
     * 
    @author jgao
     *
     
    */

    class DefaultCache implements ICache {

        
    static int FreshTimerIntervalSeconds = 1//緩存中對象生命周期的頻率(一秒)
        Map<String, SimpleCacheInfo> datas; //緩存容器
        private Timer timer; //時間任務
        
        
    /**
         * 默認構造函數
         *
         
    */

        
    public DefaultCache() {
            
    //實例化有防止線程同步操作的緩存容器
            datas = Collections.synchronizedMap(new HashMap<String, SimpleCacheInfo>());
            
            
    //刷新緩存
            TimerTask task = new CacheFreshTask(this);
            timer 
    = new Timer("SimpleCache_Timer"true);
            timer.scheduleAtFixedRate(task, 
    1000, FreshTimerIntervalSeconds * 1000);//每格一秒刷新一次(緩存中對象的生命周期減一)
        }


        
    /**
         * 判斷緩存中的對象是否存在
         * 
    @param key
         * 
    @return
         
    */

        
    public boolean contains(String key){
            
    return datas.containsKey(key);
        }

        
        
    /**
         * 獲取緩存中的對象
         * 
    @param key 對象名稱
         * 
    @return
         
    */

        
    public Object get(String key) {
            
    if (datas.containsKey(key)) {
                SimpleCacheInfo sci 
    = (SimpleCacheInfo)datas.get(key);
                
    //sci.setSecondsRemain(sci.getSecondsTotal());
                return sci.getObj();
            }

            
    return null;
        }

        
        
    /**
         * 向緩存中插入對象
         * 
    @param key 對象名稱
         * 
    @param obj 對象
         * 
    @param cacheSeconds 對象在緩存中存在的時間
         
    */

        
    public void Insert(String key, Object obj, int cacheSeconds) {
            Add(key, obj, cacheSeconds);
        }

        
        
    /**
         * 
         * 向緩存中添加對象,并返回該對象
         * 
    @param key 對象名稱
         * 
    @param obj 對象
         * 
    @param cacheSeconds 對象在緩存中存在的時間
         * 
    @return
         
    */

        
    public Object Add(String key, Object obj, int cacheSeconds) {
            
    if (cacheSeconds != 0{
                SimpleCacheInfo sci 
    = new SimpleCacheInfo(obj, cacheSeconds);
                datas.put(key, sci);
            }

            
    return obj;
        }

        
        
    /**
         * 移除緩存中的對象
         * 
    @param key 對象名稱
         * 
    @return
         
    */

        
    public Object Remove(String key) {
            SimpleCacheInfo sci 
    = datas.remove(key);
            
    if (sci != null{
                
    return sci.getObj();
            }

            
    return null;
        }

        
        
    /**
         * 緩存信息類(存儲緩存中的對象和緩存時間)
         * 
    @author jgao
         *
         
    */

        
    class SimpleCacheInfo {
            
    private Object obj;
            
    private int secondsRemain;
            
    private int cacheSeconds;
            
            
    public SimpleCacheInfo(Object obj, int cacheSeconds) {
                
    this.obj = obj;
                
    this.secondsRemain = cacheSeconds;
                
    this.cacheSeconds = cacheSeconds;
            }

            
            
    public Object getObj() {
                
    return obj;
            }


            
    int getSecondsTotal() {
                
    return cacheSeconds;
            }

            
            
    int getSecondsRemain() {
                
    return secondsRemain;
            }

            
            
    void setSecondsRemain(int value) {
                secondsRemain 
    = value;
            }

        }

        
        
    /**
         * 管理緩存中對象的生命周期的任務類(用于定時刷新緩存中的對象)
         * 
    @author jgao
         *
         
    */

        
    class CacheFreshTask extends TimerTask {
            
    private DefaultCache cache;
            
    public CacheFreshTask(DefaultCache cache) {
                
    this.cache = cache;
            }


            
    public void run() {
                
    synchronized (cache.datas) {
                    Iterator
    <Map.Entry<String, SimpleCacheInfo>> iterator
                        
    = cache.datas.entrySet().iterator();
                    
    while (iterator.hasNext()) {
                        Map.Entry
    <String, SimpleCacheInfo> entry = iterator.next();
                        SimpleCacheInfo sci 
    = entry.getValue();
                        
    if (sci.getSecondsTotal() != ICache.Forever) {
                            sci.setSecondsRemain(sci.getSecondsRemain() 
    - FreshTimerIntervalSeconds);
                            
    if (sci.getSecondsRemain() <= 0{
                                iterator.remove();
                            }

                        }

                    }

                }

            }

        }

    }


    3) CacheFactory.java 緩存工廠
    package com.jgao.cache;

    /**
     * 緩存工廠,用于獲取和制造緩存
     * 
    @author jgao
     *
     
    */

    public class CacheFactory {

        
    private static ICache cache = null;
        
        
    /**
         * 獲取caches指定的緩存
         * 
    @param caches
         * 
    @return 
         
    */

        
    public static ICache getCacheInstance(Class caches){
            
    if(cache==null){
                
    try {
                    cache 
    = (ICache) caches.newInstance();
                }
     catch (InstantiationException e) {
                    System.out.println(
    "指定的緩存類有誤,caches參數必須是ICache的實現類");
                    e.printStackTrace();
                }
     catch (IllegalAccessException e) {
                    System.out.println(
    "指定的緩存類有誤,caches參數必須是ICache的實現類");
                    e.printStackTrace();
                }

            }

            
    return cache;
        }

        
        
    /**
         * 獲取系統默認的緩存
         * 
    @return
         
    */

        
    public static ICache getDefaultCache(){
            
    if(cache==null){
                cache 
    = new DefaultCache();
            }
    else if(!(cache instanceof DefaultCache)){
                cache 
    = new DefaultCache();
            }

            
    return cache;
        }

        
        
    public static void main(String[] args) {
            ICache cache 
    = CacheFactory.getDefaultCache();
            
    if(cache.contains("area")){
                System.out.println(cache.get(
    "area"));
            }
    else{
                cache.Insert(
    "area","福州",120);
            }

            
        }

    }

    posted on 2007-04-22 06:18 JGAO編程隨筆 閱讀(1007) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人免费视频试看120秒| 亚洲A丁香五香天堂网| yy6080亚洲一级理论| 久久亚洲精品成人无码网站| 日韩成人精品日本亚洲| 亚洲精品视频免费看| 亚洲精品卡2卡3卡4卡5卡区| 黄页免费视频播放在线播放| 亚洲第一成年免费网站| 亚洲日本在线免费观看| 最近2018中文字幕免费视频| 日韩亚洲一区二区三区| 91精品成人免费国产| 亚洲乱码国产一区网址| 色多多www视频在线观看免费| 毛片视频免费观看| 亚洲国产高清国产拍精品| 91香蕉视频免费| a毛片视频免费观看影院| 亚洲国产精品无码久久98| 亚洲AV无码欧洲AV无码网站| a级毛片在线免费观看| 亚洲欧洲无码一区二区三区| 国产精品视频免费一区二区三区| 亚洲女人影院想要爱| 亚洲综合精品网站| 国产在线观a免费观看| 国产亚洲精品无码成人| 免费理论片51人人看电影| 国产精品亚洲一区二区无码| 啊灬啊灬别停啊灬用力啊免费看| 成人午夜免费视频| 亚洲真人无码永久在线观看| 免费看国产一级片| 99久久精品毛片免费播放| 亚洲AV无码AV日韩AV网站| 亚洲中文字幕日产乱码高清app| a色毛片免费视频| 四虎成人精品国产永久免费无码| 久久久久精品国产亚洲AV无码| 成人av免费电影|