gpt4 book ai didi

java - 如何在 Spring Boot 中将 TTL 附加到 Redis 缓存中的每个条目

转载 作者:行者123 更新时间:2023-12-01 18:07:50 25 4
gpt4 key购买 nike

假设我有一个模型Employee,它有一个到期组件。当第一个请求检索员工详细信息时,我想将其存储在缓存中,并根据 Employee 对象的 expiry (employee.getExpiry ())。

我无法在 Spring 中使用 @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 手动执行此操作是唯一的方法吗?

最佳答案

Spring CacheManager API 不允许为每个条目定义不同的 TTL。 RMapCache 对象是这种情况下唯一的方法。

关于java - 如何在 Spring Boot 中将 TTL 附加到 Redis 缓存中的每个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com