可以为createOrUpdate方法添加@CachePut注释吗?

时间:2018-05-18 13:16:26

标签: hazelcast spring-cache

我有一个小疑问 -

我的服务层中有一个方法,如果该ID不存在则创建记录,如果存在则更新记录。我可以在方法上加上@CachePut注释吗?或者我也应该在其上放置@Cacheable anotation

1 个答案:

答案 0 :(得分:1)

在这种情况下,您希望在执行创建或更新的服务方法上使用@CachePut。例如......

...假设

class Customer {

  @Id
  Long id;

  ...
}

并给予......

@Service
class CustomerService {

  CustomerRepository customerRepository;

  @CachePut("Customers", key="#customer.id")
  Customer createOrUpdate(Customer customer) {
    // validate customer
    // any business logic or pre-save operations
    return customerRepository.save(customer);
  }
}
在执行@Cacheable之前,

createOrUpdate(:Customer)将在指定的缓存中执行后备。如果具有ID的Customer已经存在于指定的缓存中,那么Spring将返回"缓存的#34; Customer;在这种情况下,Spring不会执行create / update方法。

但是,如果标识的Customer不存在(或无效),则Spring继续执行createOrUpdate(:Customer)方法,然后缓存方法的结果。

@CachePut的情况下,Spring将始终执行createOrUpdate(:Customer)方法。也就是说,在执行方法之前,Spring不会执行调查以确定客户是否存在,这很可能是创建/更新时的所需。

无论如何,有关基于声明的缓存的更多信息可以在Reference Guide中找到。请特别注意@CachePut docs并将其与@Cacheable docs进行比较。

希望这有帮助! -John