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

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 的項目?html

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

Solon 的緩存註解只支持:Controller 、Service 、Dao 類下的方法。且借簽了Weed3的簡潔設計方案。git

(一)示例

從Demo開始,先感覺一把github

@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...web

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 註解:app

屬性 說明
service() 緩存服務
seconds() 緩存時間
tags() 緩存標籤,多個以逗號隔開(爲當前緩存塊添加標籤,用於清除)

@CacheRemove 註解:框架

屬性 說明
service() 緩存服務
tags() 清除緩存標籤,多個以逗號隔開

附:Solon項目地址

相關文章
相關標籤/搜索