小白入職記(一):基于spring的簡單配置緩存

作為一個剛畢業(yè)的實習(xí)期職場小白,初進公司翘县,才發(fā)現(xiàn)公司的項目與大學(xué)布置的項目作業(yè)完全不一樣最域,無論是技術(shù)的深度還是交付所需考慮的情況,都不可相提并論锈麸。因此镀脂,打算寫個系列博客,總結(jié)一些學(xué)到的知識點忘伞,也順便記錄下職場生活薄翅,不管是對自己的技術(shù)水平還是文筆,想想也是沒有壞處的吧氓奈。
公司的項目里面很多地方都用到了配置項翘魄,比如將下拉框的選項配置進數(shù)據(jù)庫中,使用的時候異步請求數(shù)據(jù)庫來返回具體的下拉選項舀奶。我在做項目中的某個查詢功能的時候暑竟,需要對傳入的下拉選項在后端做校驗,若每次請求都需要校驗該項是否為數(shù)據(jù)庫中的配置育勺,就會多次查詢數(shù)據(jù)庫但荤,這樣的話無論是對性能還是服務(wù)器的壓力總歸是不太好的罗岖。于是我請教了同事,同事告訴我可以將配置信息存在內(nèi)存緩存中腹躁,這樣每次開啟服務(wù)器的時候桑包,一次查詢,一直使用纺非。

  1. 先定義配置項的封裝類
/**
 * 用于存放需要緩存的配置信息
 * 可以緩存任何你需要緩存的數(shù)據(jù)類型
 * 可以在一個類似ResourceCacheInfo的類中封裝多種配置項
 * 也可以將不同配置項封裝在一個或多個類似ResourceCacheInfo的類中
 */
public class ResourceCacheInfo {
    /**
     * 下拉框選項
     * 例1:用于存放下拉框的選項集合
     */
    private List<Map<String,String>> selectItems;
    //
    /**
     * 項目基礎(chǔ)配置項
     * 例2:用于存放全局配置信息項
     */
    private List<Map<String,String>> configInfo;

    public List<Map<String, String>> getSelectItems() {
        return selectItems;
    }

    public void setSelectItems(List<Map<String, String>> selectItems) {
        this.selectItems = selectItems;
    }

    public List<Map<String, String>> getConfigInfo() {
        return configInfo;
    }

    public void setConfigInfo(List<Map<String, String>> configInfo) {
        this.configInfo = configInfo;
    }
}
  1. 創(chuàng)建緩存工廠
/**
 * 配置項緩存工廠
 */
@Component
public class ResourceCacheFactory {
    //日志
    private static Logger Log = Logger.getLogger(ResourceCacheFactory.class);

    /**
     * 使用@bean注解可以在執(zhí)行完該方法后哑了,在其他地方可以注入并使用
     *
     * @return
     */
    @Bean
    public ResourceCacheInfo getCache() {
        Log.info("開始加載緩存");
        ResourceCacheInfo cache = new ResourceCacheInfo();
        Log.info("加載下拉框緩存");
        //模擬查詢數(shù)據(jù)庫
        cache.setSelectItems(getSelectItemFromDB());
        Log.info("加載配置項緩存");
        //獲取公共配置項
        cache.setConfigInfo(getConfigInforomDB());
        return cache;
    }
  1. 測試訪問緩存
    //自動注入bean
    @Autowired
    private ResourceCacheInfo cache;

    @GetMapping("/cache")
    public ResourceCacheInfo getCache() {
        Log.info("下拉框緩存內(nèi)容:"+cache.getSelectItems());
        Log.info("配置項緩存內(nèi)容:"+cache.getConfigInfo());
        return cache;
    }

可以看到在服務(wù)器啟動的時候,已經(jīng)開始查詢并添加進緩存

12:11:20,056  INFO ResourceCacheFactory:31 - 開始加載緩存
12:11:20,057  INFO ResourceCacheFactory:33 - 加載下拉框緩存
12:11:20,058  INFO ResourceCacheFactory:36 - 加載配置項緩存
2019-11-10 12:11:20.209  INFO 14356 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-10 12:11:20.338  INFO 14356 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2019-11-10 12:11:20.376  INFO 14356 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8180 (http) with context path ''
2019-11-10 12:11:20.378  INFO 14356 --- [  restartedMain] com.example.demo.DemoApplication         : Started DemoApplication in 4.391 seconds (JVM running for 15.558)

測試訪問緩存地址http://localhost:8180/cache

12:14:09,377  INFO CacheRes:19 - 下拉框緩存內(nèi)容:[{下拉選項一=下拉選項一}, {下拉選項二=下拉選項二}, {下拉選項三=下拉選項三}]
12:14:09,378  INFO CacheRes:20 - 配置項緩存內(nèi)容:[{MAX_IMAGE_UPLOAD_LENGTH=3}, {REQUEST_TIME_OUT=20000}, {ALLOW_HTTPS_LOGIN=1}]

可以看到緩存已經(jīng)成功獲取到了铐炫,這下其它地方需要引用的話垒手,就使用

    @Autowired
    private ResourceCacheInfo cache;

即可獲取,不需要重復(fù)查詢數(shù)據(jù)庫倒信,增加訪問速度,也可以減輕服務(wù)器的壓力泳梆。

但還有不完善的地方:

  • 由于是服務(wù)器一次啟動則讀取緩存鳖悠,若配置項發(fā)生變動,理論上只有重啟才能刷新緩存优妙,正常情況下項目是部署在生產(chǎn)服務(wù)器上的乘综,不可能隨時重啟,因此還需要在緩存工廠中新增一個刷新緩存的方法套硼,實現(xiàn)不重啟服務(wù)器即可刷新緩存的功能卡辰。
  • 這種緩存方式只是最簡單,最容易實現(xiàn)的方式邪意,spring還有自帶的緩存注解等九妈,還需要考慮的有很多。

作為一個萌新雾鬼,非常希望大家給我一點建議或指出我的不足萌朱,我一定虛心接受,若能讓其它小伙伴得到一點點幫助或啟發(fā)策菜,我會感到非常開心的(●'?'●)
這是這個demo的github地址:https://github.com/yuanbwhub/cache-demo和我的qq1252615137晶疼,歡迎小伙伴加我交流,我們共同進步~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末又憨,一起剝皮案震驚了整個濱河市翠霍,隨后出現(xiàn)的幾起案子揪罕,更是在濱河造成了極大的恐慌话速,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂抽,死亡現(xiàn)場離奇詭異浪秘,居然都是意外死亡蒋情,警方通過查閱死者的電腦和手機埠况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棵癣,“玉大人辕翰,你說我怎么就攤上這事”芬辏” “怎么了喜命?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長河劝。 經(jīng)常有香客問我壁榕,道長,這世上最難降的妖魔是什么赎瞎? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任牌里,我火速辦了婚禮,結(jié)果婚禮上务甥,老公的妹妹穿的比我還像新娘牡辽。我一直安慰自己,他們只是感情好敞临,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布态辛。 她就那樣靜靜地躺著,像睡著了一般挺尿。 火紅的嫁衣襯著肌膚如雪奏黑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天编矾,我揣著相機與錄音熟史,去河邊找鬼。 笑死洽沟,一個胖子當(dāng)著我的面吹牛以故,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裆操,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼怒详,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了踪区?” 一聲冷哼從身側(cè)響起昆烁,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缎岗,沒想到半個月后静尼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年鼠渺,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸭巴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡拦盹,死狀恐怖鹃祖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情普舆,我是刑警寧澤恬口,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站沼侣,受9級特大地震影響祖能,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛾洛,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一养铸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轧膘,春花似錦揭厚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裂明。三九已至椿浓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闽晦,已是汗流浹背扳碍。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仙蛉,地道東北人笋敞。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像荠瘪,于是被迫代替她去往敵國和親夯巷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Getting Started Burp Suite 是用于攻擊web 應(yīng)用程序的集成平臺哀墓。它包含了許多工具趁餐,并為...
    Eva_chenx閱讀 28,717評論 0 14
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常篮绰。 O...
    我想起個好名字閱讀 5,343評論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,113評論 1 32
  • 上午老公早早上班走了后雷,給孩子辦身份證的事該我接手了,收拾完叫兒子起床去派出所辦證,他說要睡覺臀突,困勉抓,我見狀也不去叫了...
    楊建新wang閱讀 102評論 0 0
  • 今天是六一兒童節(jié)藕筋,是個歡樂的日子。不免都要緬懷我們的那時候盒齿,這也提醒各位為人父母者念逞,我們曾經(jīng)都是孩子。那不禁問边翁,你...
    多麗碼字閱讀 197評論 0 2