假设我有一个模型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/