我有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...
}
}
答案 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
,因此您可以确保每次都调用此方法。