企業級java springcloud b2bc商城系統開源原始碼二次開發-hystrix 請求快取
阿新 • • 發佈:2018-12-21
hystrix支援將一個請求結果快取起來,下一個具有相同key的請求將直接從快取中取出結果,減少請求開銷。要使用該功能必須管理HystrixRequestContext,如果請求B要用到請求A的結果快取,A和B必須同處一個context。通過HystrixRequestContext.initializeContext()和context.shutdown()可以構建一個context,這兩條語句間的所有請求都處於同一個context,當然這個管理過程可以通過自定義的filter來實現。
需要JAVA Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼請加企鵝求求 :二一四七七七五六三三
Hystrix請求快取註解
@CacheResult 加入該註解的方法將開啟請求快取,預設情況下該方法的所有引數作為快取的key,也就是說只有該方法的所有引數都一致時才會走快取。
@Service public class UserCacheService { @Autowired private UserFeignClient userFeignClient; /** * @HystrixCommand 的requestCache.enabled 可控制是否支援快取 * 只有加了@CacheResult才能快取,即使requestCache.enabled=true * @param id 使用者id * @return 指定的使用者 */ @CacheResult @HystrixCommand(commandProperties = { @HystrixProperty(name="requestCache.enabled",value = "true") }) public User findUserById(Integer id){ return userFeignClient.findUserById(id); } }
如果requestCache.enabled設定為false,即使加了@CacheResult,快取也不起作用。
@CacheKey 通過該註解可以指定快取的key @CacheResult @HystrixCommand(commandProperties = { @HystrixProperty(name="requestCache.enabled",value = "true") }) public User findUserByIdAndName(@CacheKey Integer id,String name){ return userFeignClient.findUserById(id); }
上面的程式碼我們用@CacheKey修飾了id欄位,說明只要id相同的請求預設都會走快取,與name欄位無關,如果我們指定了@CacheResult的cacheKeyMethod屬性,則@CacheKey註解無效
@CacheRemove 該註解的作用就是使快取失效
/**
* 通過@CacheRemove 註解指定當呼叫findUserById時將此方法的快取刪除
* @param id 使用者id
* @param name 使用者姓名
* @return 指定的使用者
*/
@CacheResult
@CacheRemove(commandKey = "findUserById")
@HystrixCommand(commandProperties = {
@HystrixProperty(name="requestCache.enabled",value = "true")
})
public User findUserByIdAndName2(@CacheKey Integer id,String name){
return userFeignClient.findUserById(id);
}
以上程式碼指定了@CacheRemove的屬性commandKey的值為findUserById,作用就是當呼叫findUserById時,此方法的快取將刪除。