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

标签 java spring-boot caching spring-cache redisson

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

相关文章:

swift - 在 CollectionView 中滚动时应用程序卡住

java - 在 Java 中创建二进制 plist?

java - 如何从 servlet 验证连接是使用双向 SSL 建立的?

java - Spring Boot 数据源设置

java - 如何在 spring 的属性文件中设置占位符值

caching - 在 Ember Octane 中缓存的最佳方法

java - Android 中 cos 和 sin 的问题

java - 未提及数据类型的设置

java - InjectedMock 中的 NullPointerException

iis - URL 大小写敏感导致缓存问题!有没有快速修复标题?