2Hystrix 缓存注解 · SpringCloud微服务实战 · 看云

2.Hystrix 缓存

导航

本节代码地址


前面在入门篇已经讲过了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修饰方法参数