java8利用lambda表達(dá)式來封裝jedis的連接池資源

lambda表達(dá)式

什么是lambda?

“Lambda 表達(dá)式”(lambda expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對(duì)應(yīng)于其中的lambda抽象(lambda abstraction),是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)。Lambda表達(dá)式可以表示閉包(注意和數(shù)學(xué)傳統(tǒng)意義上的不同)。

需求點(diǎn)

使用過redis的java客戶端框架jedis的朋友都知道,jedis里有個(gè)連接池的概念。然而從jedis的連接池里獲取連接資源要經(jīng)過以下的步驟:

  1. 獲取Jedis實(shí)例需要從JedisPool中獲??;
  2. 用完Jedis實(shí)例需要返還給JedisPool;
  3. 如果Jedis在使用過程中出錯(cuò),則也需要還給JedisPool;

注意:這里面我們的jedis并不能釋放使用完成的資源

那么我們?cè)趺蠢胠ambda表達(dá)式來達(dá)到只寫業(yè)務(wù)代碼,吧自動(dòng)獲取資源和釋放資源來交給上層封裝的代碼來處理呢?

核心代碼封裝

我們知道關(guān)于jedis的操作這一塊,我們的過程是這樣的三步:

  1. 獲取jedis連接
  2. 業(yè)務(wù)操作
  3. 釋放資源

其中1,3是固定的操作,只有2是一個(gè)不同類型的抽象動(dòng)作
那么我們首先要吧我們的業(yè)務(wù)封裝成一個(gè)接口,至于為什么是一個(gè)接口呢,那就是因?yàn)閘ambda表達(dá)式意味著我們可以在接口做參數(shù)的方法部分直接寫實(shí)現(xiàn)類的代碼

public interface RedisDomainInterface <T> {
    public T domain(Jedis jedis);
}

然后我們需要實(shí)現(xiàn)我們的1,3部分的封裝,那么我們這部分的代碼實(shí)現(xiàn)是這樣的


public class RedisClient {

    public static <T extends Object> T domain(RedisDomainInterface<T> interfaces) {
        // 返回值
        T Object;
        // 獲取連接池里的連接
        Jedis jedis = RedisPoolClient.getInstance().getJedis();
        try {
            // 業(yè)務(wù)操作
            Object = interfaces.domain(jedis);
        } finally {
            // 釋放鏈接
            RedisPoolClient.getInstance().returnResource(jedis);
        }
        return Object;
    }
}

那么我們封裝好了之后應(yīng)該怎么用呢?
比如我們這時(shí)候需要給一個(gè)userName為xxx的人設(shè)置他的標(biāo)簽,那么我們的代碼是這個(gè)樣子的

    public static String setTag(String userName ,String tag) {
        return RedisClient.domain(jedis -> jedis.set(userName,tag));
    }

簡潔了很多,有木有,這下我們只需要關(guān)注業(yè)務(wù)代碼就可以了

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

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

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