vavr使用

高并發(fā)的場景下,DB前置緩存是常用的一種解決方案。
通常做法是將從DB查詢出的值放入緩存(分布式緩存或者本地緩存都可以),下次請求時先從緩存取數(shù)據(jù),如果獲取不到,再從DB查詢;但是如果查詢結(jié)果本就為空,緩存里會落空值,這樣會導(dǎo)致請求還是全部落到DB,這時候就需要在DB放置一個空對象。
我們可以使用guava的Optional類,也可以自己定義一個實(shí)現(xiàn)了Serializable接口的result類用來存放空對象,正好最近接觸到了vavr,所以嘗試使用了一下vavr中的Option類。

部分代碼如下

public MyObject queryMyObjectById(String id) {
    //根據(jù)主鍵id從緩存獲取數(shù)據(jù)
    Option<MyObject> option = (Option<MyObject>)cacheManager.getObject(id);
    if (option != null) {
        return option.getOrNull();
    } else {
        MyObject myObject = myObjectDAO.queryMyObjectById(id);
        //如果查詢?yōu)榭?,放入空對象,防止所有查詢?yōu)榭盏慕Y(jié)果落到DB上
        cacheManager.put(id, Option.of(myObject));
        return myObject;
    }
}

Vavr 是Java 8+中一個函數(shù)式庫,提供了一些不可變數(shù)據(jù)類型及函數(shù)式控制結(jié)構(gòu)。
官方英文文檔鏈接
翻譯文檔鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容