java - 缓存信息以获得快速 http 响应的最佳选择

标签 java spring http spring-boot caching

我正在开发一个监听 HTTP 请求的 Web 服务。该服务必须非常快速地响应并处理尽可能多的并发请求。

该服务有一个带有 2 个请求参数(param1param2)的端点,用于验证某些信息然后发送响应。

我有一些预定义的信息,我将使用这些信息来验证请求参数。例如:

  • 我知道 param1 已分配给 assign1 并且具有属性 prop1Param1 也被分配给 assign3,它具有属性 prop3

  • param2 被分配给 assign2 并具有属性 prop2

有了这些信息,当我收到一个 HTTP 请求时,我需要验证 param1 是否分配了 assign1assign2,否则,我应该返回一个空的响应。

显然,这个想法是为了避免对其进行硬编码,如果我可以在服务器运行时修改该信息,那就太好了。

为了实现这一点,我知道两个现有的解决方案(可能还有更多):

  • 使用 spring boot,并在 .yml 文件中设置该信息,以便使用 @Value(${param1}) 等占位符通过 spring bean 读取它们 等问题是,如果我想查看在该 .yml 文件中所做的更改,我将需要重新加载应用程序,因此从技术上讲,我无法在服务器运行时修改缓存信息。

  • 使用像 H2 这样的嵌入式数据库,并使用 select 获取每个请求的信息。问题是我需要为每个请求进行选择(如果我必须进行任何连接,则会增加响应时间)。但是我可以在服务器运行时修改信息。

我想知道哪个是“缓存”该信息的最佳选择,并让服务在每个请求都被阻塞时非常快。

我也在使用 spring boot 来提供该服务,但如果您知道任何更好的 Web 容器,我愿意尝试一下。

最佳答案

您过早地进行了优化。

其中之一:“我需要非常快地处理请求”和“处理尽可能多的请求”是一种模糊的性能标准。

您可以像这样更清楚地表达您的目标:

  1. 我需要我的服务每小时处理 99% 的所有请求,延迟不超过 50 毫秒。

  2. 而且我需要我的服务能够每秒处理 1000 个请求(或您需要的任何数量)

然后,您可以开始衡量性能并根据需要进行优化。

当然,缓存结果是个好主意,您应该这样做。但是,如果您担心在同一台服务器上运行的本地数据库会给您的服务增加显着的延迟,您可能会发现情况并非如此。

关于java - 缓存信息以获得快速 http 响应的最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020363/

相关文章:

java - 带有 Spring 框架的 Netty HTTP 服务器

http - 为什么 HTTP 响应头中的 "Connection"拼写错误?

java - 包不存在错误

java - 在Spring Boot中将soap响应转换回xml字符串

java - 第 3 次重新启动后,使用 Firebase 和 Facebook 身份验证的 LoginActivity 没有响应

Spring Actuator 和 @DataJpaTest 找不到 CounterService bean

java - Spring Hibernate 处理 session 中修改查询的最佳方式

php http请求内容原始数据enctype=multipart/form-data

java - 控制台上的其他消息未按正确顺序打印堆栈跟踪

java - Activity 和 Fragment 并发