1. 程式人生 > >@CacheResult、@CacheRemove、@HystrixCollapser理解和應用

@CacheResult、@CacheRemove、@HystrixCollapser理解和應用

@CacheResult
該註解用來標記請求命令返回的結果應該被快取,它必須與@HystrixCommand註解結合使用,eg:

@Override
@CacheResult
@HystrixCommand(commandKey=“getUserByNameCommandKey”)
@HystrixCollapser(batchMethod=“getUsersByNames”,collapserProperties= {
@HystrixProperty(name=“timerDelayInMilliseconds”,value=“1000”)
})
public String getUserByName(String name) {
System.out.println(“call EmallServiceImpl.getUserByName()

====”);
String json = sysFeignClient.getUserByName(name);
return json;
}

@CacheRemove
該註解用來讓請求命令的快取失效,失效的快取根據定義Key決定,eg:

@Override
@CacheRemove(commandKey=“getUserByNameCommandKey”)
@HystrixCommand
public void removeUserByNameCache(String name) {
System.out.println(“call EmallServiceImpl.removeUserByNameCache()

====”);
}

通過HystrixCollapser合併請求提高應用吞吐量

我們知道elasticsearch可以通過指定index和doc id來獲取某個doc的,也支援mget的方式,傳送一次請求,將多個doc id傳送過去查詢出相應的docs。

這樣做可以有效的減少發往ES的請求數,降低ES的負載。

在web應用層通過HystrixCollapser合併單個get請求為mget請求的處理方式,就能大大提升系統的TPS,eg:

@Override
@CacheResult
@HystrixCommand(commandKey=“getUserByIdCommandKey”)
@HystrixCollapser(batchMethod=“getUsersByIds”,collapserProperties= {
@HystrixProperty(name=“timerDelayInMilliseconds”,value=“1000”)
})
public String getUserById(String id) {
System.out.println(“call EmallServiceImpl.getUserById()

====”);
String json = sysFeignClient.getUserById(id);
return json;
}