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

劉之西東發表於2020-12-15

Springboot min -Solon 詳解系列文章:
Springboot mini - Solon詳解(一)- 快速入門
Springboot mini - Solon詳解(二)- Solon的核心
Springboot mini - Solon詳解(三)- Solon的web開發
Springboot mini - Solon詳解(四)- Solon的事務傳播機制
Springboot mini - Solon詳解(五)- Solon擴充套件機制之Solon Plugin
Springboot mini - Solon詳解(六)- Solon的校驗框架使用、定製與擴充套件
Springboot mini - Solon詳解(七)- Solon Ioc 的註解對比Spring及JSR330
Springboot mini - Solon詳解(八)- Solon的快取框架使用和定製
Springboot mini - Solon詳解(九)- 渲染控制之定製統一的介面輸出
Springboot mini - Solon詳解(十)- 怎麼用 Solon 開發基於 undertow jsp tld 的專案?

solon.extend.data 框加在完成 @Tran 註解的支援同時,還提供了 @Cache、@CachePut、@CacheRemove 註解的支援;可以為業務開發提供良好的便利性

Solon 的快取註解只支援:Controller 、Service 、Dao 類下的方法。且借簽了Weed3的簡潔設計方案。

(一)示例

從Demo開始,先感受一把

@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 介面:

public interface CacheService {
    //儲存
    void store(String key, Object obj, int seconds);

    //獲取
    Object get(String key);

    //移除
    void remove(String key);
}

2. 定製基於 Memcached 快取服務:

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. 通過配置換掉預設的快取服務:

@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專案地址

相關文章