公司的項目剛開始采用spring cache作為緩存資料,到後面發現擴充性不靈活,于是基于sprig cache原理自定義一套規則用于緩存資料。
根據請求參數生成Key,後面我們會對生成Key的規則,進一步說明; 根據Key去緩存伺服器中取資料,如果取到資料,則傳回資料,如果沒有取到資料,則執行service中的方法調用dao從DB中擷取資料,同時成功後将資料放到緩存中。 删除、新增、修改會觸發更新緩存的攔截類對緩存伺服器進行更新。
1.首先貼上核心注解類
2.使用注解案例。
解釋下上面注解:根據業務的需要,将緩存key進行分組,第一個group參數即是分組,用來辨別某個子產品,例如新聞子產品統一是group.news;第二個key是根據參數拼接成的key,第三個name隻是一個名稱而已,沒什麼太大的作用,主要是用于給其它開發人員了解, 第四個param則是操作參數,這個很重要,到時候會用它來拼接key,第五個logParam是日志。
3.貼上具體攔截類
上面的代碼使用了@Around環繞切面這個注解,為什麼不用@Befor或者@After呢?
由于@Befor是在方法執行開始前才進行切面,而@After是方法結束後進行切面。 根據業務場景的需要,@Around 可以在所攔截方法的前後執行一段邏輯,例如在查詢前先去Redis查資料,發現沒有資料再回到service層去執行查db,查完了之後需要把資料重新放到Redis,此時其他線程的請求就可以直接從Redis獲得資料,減少頻繁對資料庫的操作。
4.下面貼上查詢的具體實作方法

View Code
了解過aop 以及反射相關技術的都知道這是從方法内取出傳入參數,例如傳入的是 (String user,String age), 通過這個方法可以分别得到user和age的值。
假設使用者id = 1,分頁查詢了訂單資訊,這時候 record 參數為:pageSize:10,pageNum:2,id:1。key的最終格式 : group+namespace+record(這樣基本是唯一不會重複)。