具有多个键的Spring可缓存注释

时间:2018-09-17 19:11:56

标签: spring spring-cache

我有2种方法来查找客户记录(下面的代码),customerGuid和customerId是Customer对象中的2个不同字段。

假设我一次通过customerId查找了customer,那么我是否有一种方法可以直接从缓存中通过guid查找customer,而无需查询后端,假设这两种方法的返回类型均为Customer。

public class CustomerLookup {
    @Cacheable("customerCache")
    public Customer getCustomerByGuid(final String customerGuid) {
        // some implementation here...
    }

    @Cacheable("customerCache")
    public Customer getCustomerByCustId(final String customerId) {
        // some implementation here...
    }
}

1 个答案:

答案 0 :(得分:1)

您可以将第二个参数添加到仅用作缓存键的一种方法中。示例使用customerId作为键,然后像这样继续进行:

@Service
public class CustomerLookup {
   @Autowired
   @Lazy
   private CustomerLookup self;

   @CachePut("customerCache", key="#customerId")
   public Customer getCustomerByGuid(final String customerGuid, String customerId) {
     Customer customer = self.getCustomerByCustId(final String customerId);
     //......
   }
}

请注意,如果您不进行CustomerLookup的自我注入,则在getCustomerByCustId(final String customerId)中调用getCustomerByGuid方法时,缓存将无法工作。另请注意,@CachePut上的@Cacheable而非getCustomerByGuid,因此您可以确保每次都调用此方法。