Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Springboot中将TTL附加到Redis缓存中的每个条目_Java_Spring Boot_Caching_Spring Cache_Redisson - Fatal编程技术网

Java 如何在Springboot中将TTL附加到Redis缓存中的每个条目

Java 如何在Springboot中将TTL附加到Redis缓存中的每个条目,java,spring-boot,caching,spring-cache,redisson,Java,Spring Boot,Caching,Spring Cache,Redisson,假设我有一个模型Employee,它有一个到期组件。当第一个请求用于检索员工详细信息时,我希望基于employee对象(employee.getExpiry())的到期日将其存储在缓存中,并使用TTL 我无法在春天使用@Cachable完成它。我查看了给出的建议,但这使用了cacheManager,我无法动态设置该特定缓存对象的TTL或到期日 我正在使用Redision进行缓存,并尝试了以下操作: @Cacheable(value = "employees", key = &

假设我有一个模型
Employee
,它有一个到期组件。当第一个请求用于检索员工详细信息时,我希望基于
employee
对象(
employee.getExpiry()
)的到期日将其存储在缓存中,并使用TTL

我无法在春天使用
@Cachable
完成它。我查看了给出的建议,但这使用了
cacheManager
,我无法动态设置该特定缓存对象的TTL或到期日

我正在使用Redision进行缓存,并尝试了以下操作:

@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;
    }
@Cacheable(value=“employees”,key=“#designation”)
公共雇员检索(字符串指定){
LOG.info(“使用查询参数{}检索员工”,名称);
Employee=employeeRepository.findByDesignation(指定);
LOG.info(“检索到的雇员:{}”,雇员);
RMapCache employeCache=redissonClient.getMapCache(“员工”);
employeCache.put(employee.getDesignation(),employee,employee.getExpiry(),TimeUnit.SECONDS);
返回员工;
}
但它不起作用。我正在使用RedisionClient手动设置TTL,但该特定条目将被替换为可缓存(value=“employees”,key=“#designation”)

当我尝试不使用
@Cacheable
时,它似乎可以工作


所以我的问题是,如何使用
@Cacheable
动态设置TTL?如果不是,使用RedissonClient手动执行是否是唯一的方法?

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

谢谢。您能否告诉我,在CRUD操作方面,使用
RMapCache
而不是
@Cacheable
时,应用程序的性能是否有任何差异?我不确定
@Cacheable
在特定用例的基准测试中是如何工作的。如果只使用TTL参数,可以考虑使用RLoad对象和<代码> rBulk.ExpReId(<)/Cult>方法。