详解spring cloud hystrix请求缓存(request cache)
程序员文章站
2023-12-18 17:22:28
hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销。要使用该功能必须管理hystrixrequestcontext,如...
hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销。要使用该功能必须管理hystrixrequestcontext,如果请求b要用到请求a的结果缓存,a和b必须同处一个context。通过hystrixrequestcontext.initializecontext()和context.shutdown()可以构建一个context,这两条语句间的所有请求都处于同一个context,当然这个管理过程可以通过自定义的filter来实现,参考上一篇文章
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时,此方法的缓存将删除。
完整版代码请参考:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
详解spring cloud hystrix 请求合并collapsing
-
详解Spring Cloud中Hystrix的请求合并
-
详解spring cloud hystrix请求缓存(request cache)
-
详解spring cloud hystrix 请求合并collapsing
-
详解Spring Cloud中Hystrix的请求合并
-
spring cloud Feign+Hystrix实现Fallback多级降级,Timeout降级,Request Cache减压
-
spring cloud Feign+Hystrix实现Fallback多级降级,Timeout降级,Request Cache减压