本文將會通過例項說明如何通過aop自定義乙個快取策略,主要是調整快取重新整理的時間節點,兼顧查詢速度的同時,保證資料的可靠性
一般情況下, 快取失效是由快取框架來進行管理的,使用者可以通過設定ttl來指定key的有效時間, ttl設定太長,資料更新的不及時,ttl太短,快取重新整理也存在等待時間,達不到目標效果。
這是最常用最常用的體邏輯如:
為此,我們可以通過aop去調整key的重新整理策略,如果請求命中快取(有效時間內)則馬上返回快取中的資料,與此同時新建乙個執行緒重新整理快取,那麼下一次請求就是最新的資料,適用於更新頻率比較少的資料,但是要求更新後能快速看到更改,具體策略可以根據實際要求去優化,本文只分享思路。
springframework
ehcache ( 不一定要這個快取框架,可以選擇其它 )
org.ehcache
ehcache
3.7.1
<?xml version="1.0" encoding="utf8"?>
新建乙個能夠標誌在方法上的註解,幫這個註解起個好理解的名字,比如@mycache
@target(value = )
@retention(retentionpolicy.runtime)
@documented
public @inte***ce mycache
新建切面類 cacheaspect , 環繞切入帶有@mycache註解的方法。
下面提供的是示例, 具體邏輯可以根據實際情況進行調整
@component
@aspect
public class cacheaspect else
} /**
* 新執行緒重新整理快取
*/private class cachereflush implements runnable
public void run() catch (throwable throwable) }}
/** * spel 表示式解釋成字串
* @param point 切入物件
* @param spel spel 表示式
* @return
*/public string parsespeltostring(proceedingjoinpoint point,string spel)
spelexpressionparser spelexpressionparser = new spelexpressionparser();
spelexpression spelexpression = spelexpressionparser.parseraw(spel);
return spelexpression.getvalue(context,string.class);
}return "";
}}
直接在要進行快取的方法上打上註解 @mycache, 這裡的key 選用物件的tostring() ,
由於key支援spel表示式, 因此可以靈活配置key的組成方式。
下次如果傳進來的 querymodel 生成的key已經存在,則會直接返回快取中的資料,然後會有個新的執行緒更新資料,保證請求方能夠第一時間獲取到資料。
@mycache(namespce = "test",key = "('test@').concat(#queryobject.tostring())")
public object test(querymodel queryobject)
自定義AOP實現註解式redis快取
先說怎麼使用,超簡單 註解類 string desc default 描述 long expire default 60 快取過期時間 單位 秒 string key boolean param default false 快取key是否需要拼湊引數 無引數快取的 public listfindal...
SpringBoot 結合AOP使用自定義註解
最近使用springboot在做乙個需求的時候,使用到了aop 面向切面程式設計 spring的aop一直都是spring宣傳的一大特性,其實也沒多高大上,就是使用jdk或者aspectj做的動態 這個需求是做乙個審計日誌,使用aop是最最合適不過了,使用aop不用耦合在業務 裡,可擴充套件性好,但...
自定義註解搭配AOP使用
首先敘述一下業務,在每個模組中達到某要求時都要給當前使用者新增積分,所以這裡用到了註解搭配aop。首先自定義乙個註解 author zhanggx date 2021 01 06 16 40 target retention retentionpolicy.runtime documented pu...