【发布时间】:2020-06-17 01:57:24
【问题描述】:
假设我有一个模型Employee,它有一个过期组件。当第一个请求来检索员工详细信息时,我想将其存储在缓存中,并根据 Employee 对象 (employee.getExpiry()) 的 expiry 将其存储在缓存中。
我无法在 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 手动执行此操作?
【问题讨论】:
标签: java spring-boot caching spring-cache redisson