gpt4 book ai didi

spring - 如何在其他 Controller 中访问使用 spring @cacheable 缓存的值?

转载 作者:行者123 更新时间:2023-12-01 11:19:40 25 4
gpt4 key购买 nike

我有一个经常访问但庞大的值 - valueA,它是通过方法 - rest controller - ControllerA 的 methodA 获得的。所以我使用 @Cacheable 注释缓存了这个值,如下所示。

    @CacheConfig(cacheNames={"abc_cache"})
public class ControllerA
{

@Cacheable
@RequestMapping(value = "/value/" , method=RequestMethod.GET)
public ResponseEntity<Value> fetchValue()
{
// some logic
return new ResponseEntity<Value>(value, HttpStatus.OK);
}
}

我想在另一个方法中访问这个值 - 另一个 Controller 的 methodB - controllerB。我怎样才能访问这个值?

最佳答案

您可以使用其他一些类/bean 来提供该值。然后您可以将该 bean 注入(inject)到您想要的所有 Controller 中。

像这样:

@Component
public class MyValueService {
@Cacheable
public Value getValue() {
return ...;
}
}

然后在 Controller 中

public class ControllerA
{
@Autowired
private MyValueService valServ;

@RequestMapping(value = "/value/" , method=RequestMethod.GET)
public ResponseEntity<Value> fetchValue()
{
return new ResponseEntity<Value>(valServ.getValue(), HttpStatus.OK);
}
}

您知道 Controller -> 服务 -> 存储库模式吗?

基本上:

Controller 是网络层。他们处理 http 请求。他们使用服务。

服务负责应用程序的业务逻辑。他们使用存储库。

存储库负责数据访问 - 数据库访问、从文件系统读取/写入等。

您应该以这种方式构建您的应用程序。

一般来说,我会在 Repository 层上使用缓存。通常瓶颈是 I/O 操作(读/写文件系统、数据库调用、通过网络调用外部服务),如果可能的话,这些是您想要缓存的东西。

关于spring - 如何在其他 Controller 中访问使用 spring @cacheable 缓存的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com