模擬乙個redis快取元件啟動器

2021-08-25 05:55:38 字數 2298 閱讀 5792

starter是springboot的乙個啟動器,引入這個啟動器就可以使用想用的功能。

類似spring-boot-starter-web等功能,現在模擬乙個redis快取啟動器,實現功能:

其他專案引入這個元件依賴,在配置檔案中加上redis連線配置後

1.可以直接使用redis工具類操作redis存資料,不用在另外的專案中再弄乙個工具類

2.可以在自定義快取註解在指定方法上存放方法返回結果,不用**中嵌入快取儲存邏輯

3.spring專案和spring-boot專案都可以使用,方式略有不同

缺點:元件比較簡單,只有redis一層快取,沒有設計redis,mongdb,encache的多級快取

關於redis集群下元件使用待完善

spring專案使用:注意開啟了動態**,注意方法上有自定義快取註解,注意掃瞄了依賴專案的包

public static void main(string args)

}

@configuration

@componentscan(value=)

@enableaspectjautoproxy

public class myconfig

@service

public class testserviceimpl2

}

spring-boot專案使用:同樣掃瞄依賴包,有redis連線配置,有自定義註解

/*** 載入其他專案下的bean

* @author yp-tc-m-7129

*/@componentscan(value=)

public static void main(string args)

}

@service

public class testserviceimpl2

}

#zidingyi redis huancun peizhi

my.redis.host=127.0.0.1

my.redis.port=7011

#my.redis.database=0

#my.redis.timeout=2000

#my.redis.maxactive=8

#my.redis.maxwait=-1

#my.redis.maxidle=5

#my.redis.minidle=0

元件主要**:

乙個切面,攔截有這個自定義註解的方法,redis儲存形式是key,json字串形式

@component

@aspect

public class rediscacheaspect

/*** 獲取快取的key key 定義在註解上,支援spel表示式

* * @param pjp

* @return

*/private string getseldefkey(proceedingjoinpoint pjp)

@around("pointcut()")

public object rediscachemethod(proceedingjoinpoint pjp) throws throwable catch (throwable e)

} /**

* 把方法所在全路徑+方法名+引數作為乙個關鍵key,不會重複

*/string key = getseldefkey(pjp);

//獲取註解引數

method method = getmethod(pjp);

rediscache rediscache = method.getannotation(rediscache.class);

// 獲取方法的返回型別,讓快取可以返回正確的型別

class returntype = ((methodsignature) pjp.getsignature()).getreturntype();

object result = redistoolutils.get(key);

if (result == null)

} else

return result; }

/*** 獲取被攔截方法物件

* methodsignature.getmethod() 獲取的是頂層介面或者父類的方法物件 而快取的註解在實現類的方法上

* 所以應該使用反射獲取當前物件的方法物件

*/public method getmethod(proceedingjoinpoint pjp)

}

docker 啟動乙個 redis

d 以守護執行緒的方式執行 後台執行 i 以互動模式執行容器 t 為容器重新分配乙個偽輸入終端 p 對映容器服務的 6379 埠到宿主機的 6379 埠。外部可以直接通過宿主機ip 6379 訪問到 redis 的服務。未加 it可能會執行不起來因為,docker容器後台執行,就必須有乙個前台程序,...

Vue 乙個元件引用另乙個元件

有些時候需要這麼做,比如,我想在首頁載入輪播元件,但是又不想全域性註冊 因為不是每個頁面都需要輪播功能 方法1 1 template 2 div 34 testcomponent testcomponent 5div 6template 78 script 9 1.先使用import匯入你要在該元件...

模擬乙個js new乙個物件的過程

function person person.prototype.getname function function createobj var a createobj person console.log a 上述 createobj 模擬了js new乙個物件的過程,從該函式的 中可以清晰的看到...