【发布时间】:2020-09-25 07:24:35
【问题描述】:
从我的微服务(SERVICE-A)中,我对另一个微服务(SERVICE-B)进行了休息 api 调用以进行登录并获取访问令牌,该 API 将使用该令牌的 TTL 进行响应。 我需要缓存令牌,直到 SERVICE-B 响应的 TTL(秒)。所以我的实现如下,
@Cacheable("USERTOKEN")
public String getUserToken()
{
//Hits Service-B
//Gets token and TTL as a response from Service-B
//Returns Token or Token with TTL
}
我需要将上述方法更改为
@Cacheable("USERTOKEN")
public String getUserToken()
{
//Hits Service-B
//Gets token and TTL as a response from Service-B
//Sets expiry time for "USERTOKEN" cache <-- this needs to be added
//Returns Token or Token with TTL
}
即使在从 getUserToken() 返回之后,如果可以使用 getUserToken() 返回的 TTL 为“USERTOKEN”缓存设置ExpiryTime,它也可以。我们可以为驱逐设置 Scheduled,但这将是一个静态时间段。但在这里我需要根据服务 B 的响应将其设置为动态值。我怎样才能做到这一点。
【问题讨论】:
-
你的 CacheProvider 和缓存存储是什么?你用的是spring的默认缓存管理器吗?
-
是的.. Spring 的默认缓存管理器。我试过番石榴,但即使在那个过期时间也只能在使用 @Cacheable.. rite 之前设置?
-
是的,你是对的。根据spring docs 部分
8.7. How can I Set the TTL/TTI/Eviction policy/XXX feature?。 Spring 没有该功能,因为它提供了抽象缓存实现,您可以使用 Redis 等不同的缓存提供者来实现这一点
标签: java spring-boot guava spring-cache