2

我正在使用基于 Netflix OSS 架构的 Spring Cloud。我需要缓存我使用 Get-Set-Get 模式的方法之一的结果。

 public class UserService {    
    @CacheResult
    @HystrixCommand
    public User getUserById(@CacheKey String id) { // GET
        return storage.get(id);
    }

    @CacheRemove(commandKey = "getUserById")
    @HystrixCommand
    public void update(@CacheKey("id") User user) { // SET
        storage.put(user.getId(), user);
    }
}    

现在我的问题很简单。我需要知道如果我运行了该服务的多个实例,是否可以使用分布式缓存?如果是,如果大小增加,我可以使用 Redis 之类的东西吗?

4

1 回答 1

0

是的,在文档中看到

如何实现示例:

public class UserService extends HystrixCommand<Boolean> {
     private final User user;

     public User getUserById(String id) {
        super(HystrixCommandGroupKey.Factory.asKey("AnyUser"));
        user = storage.get(id);
        return user;
    }

    public void update(User user) { // SET
        super(HystrixCommandGroupKey.Factory.asKey("AnyUser"));
        this.user = user;
        storage.put(user.getId(), user);
    }

    @Override
    protected Boolean run() {
        return user == null || (user != null && user.id == 0);
    }

    @Override
    protected String getCacheKey() {            
        return (user != null ) ?String.valueOf(user.id):"";
    }
}
于 2017-11-16T19:14:15.803 回答