精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:如何設(shè)計(jì)和實(shí)現(xiàn)一個(gè)帶過(guò)期時(shí)間的本地緩存?

開(kāi)發(fā) 前端
今天我們來(lái)基于ConcurrentHashMap與ScheduledThreadPoolExecutor來(lái)實(shí)現(xiàn)一個(gè)線程安全的本地緩存:LocalCache。在LocalCache中支持永久緩存與臨時(shí)緩存,永久緩存的數(shù)據(jù)一直有效,臨時(shí)緩存的數(shù)據(jù)在指定時(shí)間到期之后會(huì)自動(dòng)從緩存中移出。

在日常開(kāi)發(fā)中有很多這樣的場(chǎng)景:有一些業(yè)務(wù)系統(tǒng)的配置信息,數(shù)據(jù)量不大,修改頻率不高,但是訪問(wèn)很頻繁。如果每次程序都從數(shù)據(jù)庫(kù)或集中式緩存中獲取,受限于硬盤 I/O性能、遠(yuǎn)程網(wǎng)絡(luò)訪問(wèn)限制等,程序的執(zhí)行效率不高。在這樣的業(yè)務(wù)場(chǎng)景中,我們可以通過(guò)本地緩存來(lái)提升數(shù)據(jù)訪問(wèn)的效率。

今天我們來(lái)基于ConcurrentHashMap與ScheduledThreadPoolExecutor來(lái)實(shí)現(xiàn)一個(gè)線程安全的本地緩存:LocalCache。在LocalCache中支持永久緩存與臨時(shí)緩存,永久緩存的數(shù)據(jù)一直有效,臨時(shí)緩存的數(shù)據(jù)在指定時(shí)間到期之后會(huì)自動(dòng)從緩存中移出。

LocalCache提供了數(shù)據(jù)安全的增、刪、改、查功能,具體方法如下所示:

方法名稱

方法說(shuō)明

put(String key , V value)

向緩存中插入數(shù)據(jù),數(shù)據(jù)永久有效

put(String key , V value , int seconds)

向緩存中插入數(shù)據(jù),數(shù)據(jù)根據(jù)設(shè)定的時(shí)間生效,時(shí)間到期會(huì)從緩存中移出

containKey(String key)

判斷緩存中是否包含對(duì)應(yīng)的key

get(String key)

根據(jù)key從緩存中獲取數(shù)據(jù)

remove(String key)

移出緩存中對(duì)應(yīng)key的數(shù)據(jù)

shutdownNow()

關(guān)閉緩存池

1. 設(shè)計(jì)原理

LocalCache主要由3個(gè)部分組成:數(shù)據(jù)緩存、數(shù)據(jù)超時(shí)時(shí)間、數(shù)據(jù)清理任務(wù)。數(shù)據(jù)緩存和數(shù)據(jù)超時(shí)時(shí)間都采用ConcurrentHashMap來(lái)存儲(chǔ)數(shù)據(jù),數(shù)據(jù)超時(shí)時(shí)間中Key為數(shù)據(jù)存儲(chǔ)的鍵,value是數(shù)據(jù)的時(shí)間戳。數(shù)據(jù)清理任務(wù)采用ScheduledThreadPoolExecutor實(shí)現(xiàn)任務(wù)調(diào)度,默認(rèn)的任務(wù)線程數(shù)為1,這樣可以避免多線程帶來(lái)的并發(fā)修改問(wèn)題,同時(shí)線程都是內(nèi)存操作,這樣單線程同樣具備高性能。

本地緩存的設(shè)計(jì)如下圖所示:

圖片圖片

每次項(xiàng)緩存中插入數(shù)據(jù)時(shí),LocalCache首先會(huì)將數(shù)據(jù)插入到ConcurrentHashMap中。然后判斷有沒(méi)有設(shè)置超時(shí)時(shí)間,如果有超時(shí)時(shí)間,LocalCache會(huì)將失效時(shí)間插入到ConcurrentHashMap中,并創(chuàng)建數(shù)據(jù)清理任務(wù),之后任務(wù)提交到ScheduledThreadPoolExecutor線程池中。

每次從緩存中查詢數(shù)據(jù),LocalCache會(huì)直接從ConcurrentHashMap中讀取數(shù)據(jù)。

定時(shí)任務(wù)線程池會(huì)按照超時(shí)時(shí)間來(lái)觸發(fā)數(shù)據(jù)清理任務(wù),數(shù)據(jù)清理任務(wù)會(huì)從數(shù)據(jù)時(shí)長(zhǎng)的緩存池中獲取Key對(duì)應(yīng)的時(shí)間,判斷當(dāng)前Key對(duì)應(yīng)的數(shù)據(jù)是否已經(jīng)到期了。如果數(shù)據(jù)已經(jīng)到期了,LocalCache會(huì)調(diào)用remove方法將數(shù)據(jù)從緩存池中移除。

2. 實(shí)現(xiàn)方案

LocalCache作為本地緩存的接口,定義了數(shù)據(jù)插入、數(shù)據(jù)刪除、數(shù)據(jù)查詢的相關(guān)接口方法。DefaultLocalCache 定義了兩個(gè)ConcurrentHashMap變量:dataMap和timeOutMap。dataMap用來(lái)緩存數(shù)據(jù)信息,timeOutMap用來(lái)存儲(chǔ)數(shù)據(jù)失效的時(shí)間戳,同時(shí)還定義了數(shù)據(jù)清理任務(wù)ClearTask,ClearTask負(fù)責(zé)將過(guò)期的數(shù)據(jù)從dataMap中移除。UML圖如下所示:

圖片圖片

3. 代碼展示

3.1 接口定義

public interface LocalCache<V> {
    /**
     * 插入數(shù)據(jù),數(shù)據(jù)永久有效
     */
    boolean put(String key, V value);

    /**
     * 插入數(shù)據(jù),在指定時(shí)間內(nèi)生效
     */
    boolean put(String key, V value, int seconds);

    /**
     * 是否包含指定的key
     */
    boolean containKey(String key);

    /**
     * 獲取指定Key的值
     */
    V get(String key);

    /**
     * 從緩存中移除key對(duì)應(yīng)的數(shù)據(jù)
     */
    void remove(String key);

    void shutdownNow();
}

在接口LocalCache中定義了兩個(gè)數(shù)據(jù)插入的put接口:一個(gè)沒(méi)有到期時(shí)間,另一個(gè)有到期時(shí)間。沒(méi)有到期時(shí)間表示數(shù)據(jù)永久有效,有到期時(shí)間的數(shù)據(jù)會(huì)在到期后從緩存中移除。

接口實(shí)現(xiàn)

在接口實(shí)現(xiàn)DefaultLocalCache內(nèi)部定義了三個(gè)常量:緩存的默認(rèn)大小DEFAULT_CAPACITY、最大容量MAX_CAPACITY、定時(shí)線程池的大小DEFAULT_THREAD_SIZE。核心代碼如下:

public class DefaultLocalCache<V> implements LocalCache<V> {
    // 默認(rèn)容量
    private static final int DEFAULT_CAPACITY = 1024;
    private static final int MAX_CAPACITY = 100000;

    private static final int DEFAULT_THREAD_SIZE = 1;

    private final int maxSize;

    //數(shù)據(jù)map
    private volatile ConcurrentHashMap<String,V> dataMap;
    //過(guò)期時(shí)間
    private final ConcurrentHashMap<String,Long> timeOutMap;

    //定時(shí)任務(wù)
    private final ScheduledExecutorService executorService;

    public DefaultLocalCache() {
        maxSize = MAX_CAPACITY;
        dataMap = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
        timeOutMap = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
        executorService = new ScheduledThreadPoolExecutor(DEFAULT_THREAD_SIZE) ;
    }

    public DefaultLocalCache(int size) {
        maxSize = size;
        dataMap = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
        timeOutMap = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
        executorService = new ScheduledThreadPoolExecutor(DEFAULT_THREAD_SIZE) ;
    }

    @Override
    public boolean put(String key, V value) {
        //檢查容量
        if(checkCapacity()){
            dataMap.put(key,value);
            return true;
        }
        return false;
    }



    @Override
    public boolean put(String key, V value, int seconds) {
        if(checkCapacity()){
            dataMap.put(key,value);
            if(seconds >= 0){
                timeOutMap.put(key,getTimeOut(seconds));
                ClearTask task = new ClearTask(key);
                executorService.schedule(task, seconds, TimeUnit.SECONDS);
            }
        }
        return false;
    }

 ......

    class ClearTask implements Runnable{
        private String key;

        public ClearTask(String key){
            this.key = key;
        }
        @Override
        public void run() {
            //判斷緩存中是否有key
            if(timeOutMap.contains(key)){
                //獲取失效時(shí)間
                Long expire = timeOutMap.get(key);
                //如果失效時(shí)間大于0,并且比當(dāng)前時(shí)間小,則刪除緩存
                if(expire > 0){
                    long now = System.currentTimeMillis();
                    if(now >= expire){
                        remove(key);
                    }
                }
            }
        }
    }
}

在LocalCache的默認(rèn)實(shí)現(xiàn)DefaultLocalCache中,基于ConcurrentHashMap與ScheduledThreadPoolExecutor結(jié)合使用,使得LocalCache支持永久緩存與臨時(shí)緩存兩種能力。

責(zé)任編輯:武曉燕 來(lái)源: JAVA日知錄
相關(guān)推薦

2024-12-26 10:19:16

2025-10-20 04:00:00

2025-11-11 09:25:19

2024-02-20 14:10:55

系統(tǒng)緩存冗余

2024-01-19 14:03:59

Redis緩存系統(tǒng)Spring

2025-09-19 09:57:46

2021-05-19 08:17:35

秒殺場(chǎng)景高并發(fā)

2021-12-13 09:02:13

localStorag面試前端

2024-01-15 10:38:20

多級(jí)緩存數(shù)據(jù)一致性分布式緩存

2025-06-04 03:15:00

高并發(fā)短鏈系統(tǒng)

2022-08-18 20:02:04

JSLRU緩存

2021-06-09 07:55:19

NodeEventEmitte驅(qū)動(dòng)

2022-04-08 08:26:03

JavaHTTP請(qǐng)求

2021-09-28 13:42:55

Chrome Devwebsocket網(wǎng)絡(luò)協(xié)議

2025-09-15 10:05:00

后端URL短鏈

2024-10-07 08:52:59

分布式系統(tǒng)分布式 IDID

2025-09-17 10:08:43

2024-09-11 22:51:19

線程通訊Object

2023-11-20 10:09:59

2022-02-07 20:18:29

Redis緩存裝飾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

91精品又粗又猛又爽| 国产成人精品日本亚洲11 | 久久蜜桃av| 色88888久久久久久影院按摩| 欧美性xxxx69| 国产精品久久综合青草亚洲AV| 亚洲网站啪啪| 国产午夜精品视频| 欧美日韩高清区| 午夜性福利视频| 一级黄色短视频| 1769国内精品视频在线播放| 久草一区二区| 中文字幕欧美色图| 精品电影一区| 在线播放日韩av| 午夜免费福利影院| 国产成人免费| 天天射综合影视| 中文字幕日韩一区二区三区不卡| 污视频软件在线观看| 久久国产主播| 久久久亚洲天堂| 久久久久久久久久97| 亚洲素人在线| 欧美精品一区二区高清在线观看| 狠狠操狠狠干视频| 美女18一级毛片一品久道久久综合| 亚洲欧美一区二区三区极速播放 | 蜜桃一区二区三区在线观看| 久久亚洲精品小早川怜子66| 中文字幕高清视频| 日韩一区二区三区在线看| 欧美影院午夜播放| 精品久久久久久久久久久久久久久 | 韩日视频一区| 久久精品国产一区二区电影| 国产精品久久久久精| 第四色在线一区二区| 欧美久久高跟鞋激| 成年人免费大片| 91九色在线看| 一区二区三区欧美激情| 色阁综合av| av免费网站观看| 免费的黄网站在线观看| 久久久.com| 欧美精品中文字幕一区二区| 天天干天天爽天天操| 国产福利精品一区二区| 国产美女被下药99| 中文无码精品一区二区三区| 久久九九国产| 亚洲天堂av中文字幕| 美女av一区| 精品电影一区二区| 第一页在线视频| 91国内精品白嫩初高生| 日韩视频国产视频| 日本少妇xxx| 日韩视频在线直播| 日韩精品资源二区在线| 精品人妻一区二区乱码| 香港久久久电影| 精品国产乱码久久久久久图片 | 91在线视频免费91| 精品一区久久久久久| 水莓100国产免费av在线播放| 99精品视频在线观看| 六十路精品视频| 国产小视频在线观看| 中文字幕成人网| 一级二级三级欧美| 亚洲小说区图片| 亚洲成人av在线电影| 国产午夜大地久久| 欧美成人影院| 欧美男生操女生| 下面一进一出好爽视频| 老司机aⅴ在线精品导航| 日韩精品视频在线观看网址| 无码人妻aⅴ一区二区三区69岛| av中文一区| 草民午夜欧美限制a级福利片| 久久久久久久久久久久久久久久久 | 国产亚洲精品成人av久久ww| 日日操免费视频| 欧美视频不卡| 欧美综合在线观看| 一本色道久久综合无码人妻| 国产iv一区二区三区| 欧美日韩国产不卡在线看| 五月天婷婷在线视频| 一个色综合网站| 久久综合久久色| 久久99成人| 亚洲天堂视频在线观看| 91麻豆免费视频网站| 国产亚洲欧洲| 91老司机精品视频| 久久精品a一级国产免视看成人| 中文字幕永久在线不卡| 成人免费aaa| 四虎地址8848精品| 亚洲精品自在久久| 午夜国产小视频| 久久精选视频| 国产精品久久久久久久久婷婷| shkd中文字幕久久在线观看| 亚洲国产精品麻豆| 不卡的av中文字幕| 少妇久久久久| 欧美精品久久一区二区| 中文字幕+乱码+中文| 亚洲情趣在线观看| 欧美一级大片在线观看| 亚洲一卡二卡在线| 久久中文娱乐网| 91传媒免费视频| 欧美一级在线| 亚洲美女视频网| 欧美三级在线免费观看| 久久网站热最新地址| 久久99久久亚洲国产| 无码人妻一区二区三区线| 国产精品91一区二区| 亚洲成人18| 色网在线免费观看| 日韩女优av电影| 极品美妇后花庭翘臀娇吟小说| a毛片在线播放| 亚洲韩国一区二区三区| 欧美一级xxxx| 精品国产乱码久久久久久果冻传媒| 97精品视频在线| www日本高清| 亚洲免费看黄网站| 中文av一区二区三区| 国产精品一区二区三区av麻| 91高清免费视频| 狠狠综合久久av一区二区| 亚洲精品亚洲人成人网| 国产欧美一区二| 色欧美自拍视频| 国产精品美女在线| 成年人在线视频免费观看| 色av一区二区| 中文字幕免费视频| 玖玖精品视频| 日韩欧美99| 中文在线免费视频| 亚洲男女自偷自拍图片另类| 日韩美女视频网站| 99热在这里有精品免费| 又粗又黑又大的吊av| 亚洲自拍电影| 国产精品日韩在线一区| 天堂地址在线www| 日韩av最新在线| 熟妇高潮一区二区| 欧美日本不卡| 51国产成人精品午夜福中文下载| 欧美jizz18hd性欧美| 欧美丰满一区二区免费视频| 我要看黄色一级片| 国产精品夜夜嗨| 刘亦菲国产毛片bd| 澳门精品久久国产| 午夜精品久久久久久久99热浪潮 | 欧美一三区三区四区免费在线看| 日本一级片免费| 国产成人av影院| 成人免费观看cn| 欧美精品一区二区久久| 亚洲电影第三页| 91看片破解版| 国产主播精品| 免费看成人片| 久久av影院| 欧美激情中文字幕乱码免费| 青春草在线观看| 欧美日韩精品一区二区三区四区| 亚洲综合网在线| 波多野洁衣一区| 日韩av播放器| 欧美国产三级| 欧美亚洲另类久久综合| 亚洲欧美专区| 91成人在线观看国产| 婷婷激情在线| 亚洲国产成人精品女人久久久| 蜜臀精品一区二区三区| 亚洲欧美一区二区三区久本道91 | 91精品国产乱码久久久| 亚洲一区在线看| 能直接看的av| a在线欧美一区| 日本高清一区二区视频| 免费在线欧美黄色| 国产av第一区| 国产欧美日韩免费观看 | 日本亚洲不卡| 91欧美激情另类亚洲| 亚洲精品国产精品国产| 久久精品影视伊人网| 三级理论午夜在线观看| 欧美一区二区三区在线观看视频| 欧美一区免费看| 亚洲综合色区另类av| 成人一级片免费看| 91老师片黄在线观看| 国产又黄又嫩又滑又白| 美女网站一区二区| 国产乱子夫妻xx黑人xyx真爽| 午夜性色一区二区三区免费视频| 午夜精品一区二区在线观看| 亚洲一区二区三区中文字幕在线观看| 国产精品6699| 欧美gv在线观看| 久久琪琪电影院| 四虎影院观看视频在线观看 | 日本女人一区二区三区| 欧美日韩亚洲第一| 亚洲国产欧美国产综合一区| 欧美大片免费播放| 久久高清免费| 亚洲欧美日本国产有色| 香蕉久久精品日日躁夜夜躁| 国产伦视频一区二区三区| 日韩欧美激情电影| 91九色国产视频| 五月天色综合| 国产日韩在线视频| 激情亚洲小说| 国产欧美日韩91| 黄色成人在线观看网站| 国产精品青青在线观看爽香蕉| 四虎4545www国产精品| 欧洲s码亚洲m码精品一区| 国产精品一二三产区| 97超级碰碰人国产在线观看| 超黄网站在线观看| 久久久久久久国产| www.youjizz.com在线| 97香蕉超级碰碰久久免费软件| 青春草在线免费视频| 午夜精品久久久久久久久久久久久| 国产女18毛片多18精品| 欧美疯狂性受xxxxx喷水图片| 国产一级片一区二区| 在线观看av一区二区| 久草视频在线免费| 欧美在线影院一区二区| 糖心vlog精品一区二区| 欧美三级午夜理伦三级中视频| 中文在线资源天堂| 91精品国产手机| 中文字幕 国产精品| 色成年激情久久综合| 国产成人精品亚洲| 欧美日韩一区久久| 国产精品无码在线播放 | 国产精品宾馆在线精品酒店| 国产欧美三级| 久久影视电视剧免费网站| 天堂91在线| 亚洲香蕉成视频在线观看| chinese偷拍一区二区三区| 在线一区二区日韩| 成人免费高清| 97婷婷涩涩精品一区| 色天使综合视频| 91视频国产高清| 麻豆成人入口| 午夜精品一区二区在线观看 | 久久久久久久久久国产| 咪咪网在线视频| 国产精品露脸自拍| 日韩中文字幕一区二区高清99| 国产亚洲二区| 成人午夜av| 日本wwwcom| 日本欧美韩国一区三区| 特黄特色免费视频| 久久老女人爱爱| 搜索黄色一级片| 精品福利樱桃av导航| 中文字幕精品一区二区精| 日韩欧美一区二区免费| 深夜视频在线免费| 久久成人18免费网站| 自拍一区在线观看| 91亚洲人电影| 久久99高清| 国产一区二区四区| 另类专区欧美蜜桃臀第一页| 国产精品一区二区在线免费观看| 国产日本欧美一区二区| 久草免费在线视频观看| 欧美色精品在线视频| 欧美自拍偷拍第一页| 日韩中文在线中文网三级| 国产高清中文字幕在线| 亚洲aⅴ日韩av电影在线观看| 亚洲免费成人av在线| 一本色道综合久久欧美日韩精品| 噜噜噜在线观看免费视频日韩| 污网站在线免费| 久久美女高清视频| 精品少妇一二三区| 欧美日本一区二区| 亚洲欧美综合一区二区| 欧美黄色性视频| 欧美啪啪网站| 欧美精品v日韩精品v国产精品| 欧美久久成人| 色综合男人天堂| 成人一区福利| 粉嫩高清一区二区三区精品视频| sdde在线播放一区二区| 妞干网在线视频观看| 国产精品99精品久久免费| 国精产品视频一二二区| 91福利视频网站| 色一情一乱一区二区三区| 九九热视频这里只有精品| 国产精品亚洲成在人线| 日本一区二区三区在线视频| 翔田千里一区二区| 亚洲一级av无码毛片精品| 亚洲一级电影视频| www.av网站| 美女视频久久黄| 亚洲影院一区| 国产二级片在线观看| 懂色av中文一区二区三区| www日韩在线| 欧美日韩三级一区| 二区三区在线播放| 国产成人啪精品视频免费网| 真实原创一区二区影院| 国模无码视频一区二区三区| 成人一级视频在线观看| 久久久久久久久久久久久久免费看 | 福利精品在线| 欧美午夜精品久久久久久蜜| 性欧美xxxx大乳国产app| 国产精品三级在线观看无码| 欧美日韩精品二区| 色网站在线免费观看| 亲爱的老师9免费观看全集电视剧| 欧美日日夜夜| 日韩中文字幕二区| 中文字幕乱码一区二区免费| 在线播放成人av| 久久综合九色九九 | 欧美一区二区综合| 日韩高清不卡一区二区| 日韩欧美视频免费观看| 91精品国产乱码久久蜜臀| 中文字幕在线播放网址| 国产伦精品一区二区三毛| 美女视频一区免费观看| 久久久精品成人| 欧美一区二区三区啪啪| sm久久捆绑调教精品一区| 奇米精品在线| 国产一区二区在线影院| 日本视频www| 亚洲欧美日韩天堂一区二区| 色诱色偷偷久久综合| www插插插无码免费视频网站| 99久久精品国产一区二区三区| 国内自拍视频在线播放| 丝袜一区二区三区| 99re91这里只有精品| 激情五月开心婷婷| 国产精品电影院| 色偷偷在线观看| 国产精品自产拍高潮在线观看| 亚洲五月综合| 加勒比精品视频| 欧美日韩一区二区三区四区 | 日韩av免费在线看| 99久久精品网| 老鸭窝一区二区| 这里只有精品电影| 日本三级一区| 在线视频不卡一区二区| 成人动漫精品一区二区| 夜夜狠狠擅视频| 7777精品久久久久久| 欧美丰满日韩| 亚洲第一成人网站| 欧美电视剧在线看免费| avav成人| 国产婷婷一区二区三区| 亚洲欧美一区二区在线观看| 亚洲av成人精品一区二区三区在线播放 | 日韩精品一区二区不卡|