1. 程式人生 > >Springboot mini - Solon詳解(八)- Solon的快取框架使用和定製

Springboot mini - Solon詳解(八)- Solon的快取框架使用和定製

> Springboot min -Solon 詳解系列文章: > [Springboot mini - Solon詳解(一)- 快速入門](https://www.cnblogs.com/noear/p/14115763.html) > [Springboot mini - Solon詳解(二)- Solon的核心](https://www.cnblogs.com/noear/p/14115817.html) > [Springboot mini - Solon詳解(三)- Solon的web開發](https://www.cnblogs.com/noear/p/14115846.html) > [Springboot mini - Solon詳解(四)- Solon的事務傳播機制](https://www.cnblogs.com/noear/p/14119759.html) > [Springboot mini - Solon詳解(五)- Solon擴充套件機制之Solon Plugin](https://www.cnblogs.com/noear/p/14125526.html) > [Springboot mini - Solon詳解(六)- Solon的校驗框架使用、定製與擴充套件](https://www.cnblogs.com/noear/p/14128571.html) > [Springboot mini - Solon詳解(七)- Solon Ioc 的註解對比Spring及JSR330](https://www.cnblogs.com/noear/p/14139635.html) > [Springboot mini - Solon詳解(八)- Solon的快取框架使用和定製](https://www.cnblogs.com/noear/p/14139720.html) > [Springboot mini - Solon詳解(九)- 渲染控制之定製統一的介面輸出](https://www.cnblogs.com/noear/p/14139733.html) > [Springboot mini - Solon詳解(十)- 怎麼用 Solon 開發基於 undertow jsp tld 的專案?](https://www.cnblogs.com/noear/p/14139768.html) `solon.extend.data` 框加在完成 @Tran 註解的支援同時,還提供了 @Cache、@CachePut、@CacheRemove 註解的支援;可以為業務開發提供良好的便利性 Solon 的快取註解只支援:Controller 、Service 、Dao 類下的方法。且借簽了Weed3的簡潔設計方案。 ### (一)示例 從Demo開始,先感受一把 ```java @Controller public class CacheController { /** * 執行結果快取10秒,並新增 test_${label} 和 test1 標籤 * */ @Cache(tags = "test_${label},test1" , seconds = 10) @Mapping("/cache/") public Object test(int label) { return new Date(); } /** * 執行後,清除 標籤為 test 的快取(不過,目前沒有 test 的示籤...) * */ @CacheRemove(tags = "test") @Mapping("/cache/clear") public String clear() { return "清除成功(其實無效)-" + new Date(); } /** * 執行後,清除 標籤為 test_${label} 的快取 * */ @CacheRemove(tags = "test_${label}") @Mapping("/cache/clear2") public String clear2(int label) { return "清除成功-" + new Date(); } } ``` ### (二)定製分散式快取 Solon 的快取標籤,是通過CacheService介面提供支援的。定製起來也相當的方便,比如:對接Memcached... #### 1. 瞭解 CacheService 介面: ```java public interface CacheService { //儲存 void store(String key, Object obj, int seconds); //獲取 Object get(String key); //移除 void remove(String key); } ``` #### 2. 定製基於 Memcached 快取服務: ```java public class MemCacheService implements CacheService{ private MemcachedClient _cache = null; public MemCacheService(Properties props){ //略... } @Override public void store(String key, Object obj, int seconds) { if (_cache != null) { _cache.set(key, seconds, obj); } } @Override public Object get(String key) { if (_cache != null) { return _cache.get(key); } else { return null; } } @Override public void remove(String key) { if (_cache != null) { _cache.delete(key); } } } ``` #### 3. 通過配置換掉預設的快取服務: ```java @Configuration public class Config { //此快取,將替代預設的快取服務 @Bean public CacheService cache(@Inject("${cache}") Properties props) { return new MemCacheService(props); } } ``` ### (三)註解說明 **@Cache 註解:** | 屬性 | 說明 | | -------- | -------- | | service() | 快取服務 | | seconds() | 快取時間 | | tags() | 快取標籤,多個以逗號隔開(為當前快取塊新增標籤,用於清除) | **@CachePut 註解:** | 屬性 | 說明 | | -------- | -------- | | service() | 快取服務 | | seconds() | 快取時間 | | tags() | 快取標籤,多個以逗號隔開(為當前快取塊新增標籤,用於清除) | **@CacheRemove 註解:** | 屬性 | 說明 | | -------- | -------- | | service() | 快取服務 | | tags() | 清除快取標籤,多個以逗號隔開 | ### 附:Solon專案地址 * gitee: [https://gitee.com/noear/solon](https://gitee.com/noear/solon) * github: [https://github.com/noear/solon](https://github.com/noear