2Hystrix 缓存注解 · SpringCloud微服务实战 · 看云
2.Hystrix 缓存
导航
本节代码地址
GitHub: https://github.com/xuyisu/fw-sping-cloud/tree/master/fw-cloud-hystrix/fw-cloud-hystrix-ribbon
GitHub: https://github.com/xuyisu/fw-sping-cloud/tree/master/fw-cloud-ribbon/fw-cloud-ribbon-server
前面在入门篇已经讲过了Hystrix的缓存,我们现在在Spring Cloud 篇也实现一个缓存的功能。
创建缓存我们需要创建一个实现java.servlet.Filter类的过滤器,并且需要初始化请求上下文,跟入门篇一样。这次可以减少每次创建上下文的代码量。
2.1 新建过滤器
这里我们对全部的url进行过滤,因此配置了/*
@WebFilter(urlPatterns = "/*",filterName = "hystrixFilter")
@Component
public class HystrixFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HystrixRequestContext context = HystrixRequestContext.initializeContext();
try {
filterChain.doFilter(servletRequest,servletResponse);
}finally {
context.shutdown();
}
}
}
对于接口请求的改造只需要加一个@CacheResult的注解,注意需要配合@HystrixCommand一起使用。
2.2 重启项目
这里需要将fw-cloud-ribbon-server启动起来,并且重启当前hystrix项目,侯然Postman 测试接口localhost:8675/user/1
可以看到,第一次请求之后,同样的请求就走缓存了,后面不会再调用接口了。
2.3 缓存其它注解
同样的问题,缓存不能一直不变的,如果数据发生变动,缓存里的数据要可以更新或者删除,否则就会产生脏数据。
可以使用@CacheRemove移除缓存 、@CacheKey修饰方法参数