Как прикрепить TTL к каждой записи в Redis Cache в Springboot - PullRequest
0 голосов
/ 04 марта 2020

Скажем, у меня есть модель 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 единственный способ?

1 Ответ

0 голосов
/ 06 марта 2020

Spring CacheManager API не позволяет определять разные TTL для каждой записи. RMapCache объект является единственным способом в этом случае.

...