假设我有一个模型Employee,它有一个到期组件。当第一个请求来检索员工详细信息时,我希望基于 Employee对象(employee.getExpiry())的TTL将其存储在缓存中。
我无法在春季使用@Cachable来完成它。我查看了给定here的建议,但这使用了cacheManager,因此无法动态设置TTL或对特定缓存对象的过期。
我正在使用Redission进行缓存,我尝试了以下方法:
@Cacheable(value = "employees", key = "#designation")
public Employee retrieve(String designation) {
LOG.info("Retrieving Employee with query parameters: {}", designation);
Employee employee = employeeRepository.findByDesignation(designation);
LOG.info("Retrieved Employee: {}", employee);
RMapCache<String, Employee> employeCache = redissonClient.getMapCache("employees");
employeCache.put(employee.getDesignation(), employee, employee.getExpiry(), TimeUnit.SECONDS);
return employee;
}但不起作用。我正在使用redissionClient手动设置TTL,但该特定条目被@Cacheable(value = "employees", key = "#designation")替换。
当我尝试不使用@Cacheable时,它似乎很有效。
因此,我的问题是,如何使用@Cacheable动态地设置TTL?如果不是,手动使用RedissonClient是唯一的方法吗?
发布于 2020-03-06 09:26:23
Spring CacheManager API不允许每个条目定义不同的TTL。在这种情况下,RMapCache对象是唯一的方法。
https://stackoverflow.com/questions/60528360
复制相似问题