使用AOP實現自定義快取策略

2021-09-18 06:31:16 字數 1852 閱讀 4446

本文將會通過例項說明如何通過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...