Скажем, у меня есть модель Employee
, в которой есть компонент истечения срока действия. Когда приходит первый запрос на получение сведений о сотруднике, я хочу сохранить его в кэше с TTL на основе срок действия объекта Employee
(employee.getExpiry()
).
I Я не могу сделать это с помощью @Cachable
весной. Я посмотрел на предложение, данное здесь , но здесь используется 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;
}
Но это не работает. Я вручную устанавливаю TTL, используя redissionClient
, но эта конкретная запись заменяется на @Cacheable(value = "employees", key = "#designation")
Когда я пытаюсь без @Cacheable
, кажется, что он работает.
Так что мой вопрос такое, как я могу установить TTL динамически, используя @Cacheable
? Если нет, то делает ли это вручную, используя RedissonClient
единственный способ?