Skip to content
由魔法生成的目录

M2.3

任务描述

多事的 bLue 发现,现有的接口服务在很多时候响应速度并不理想,他想让你优化一下,于是甩下一句话「喵的,加缓存啊」就跑路了。

是的,他说的很有道理:由于选手信息和 rating 并不频繁变化,你的后端接口服务并不需要每次都爬取数据。

任务要求

你需要在程序上添加内存缓存,当请求的 handle 已被缓存时,直接从内存中返回数据,跳过再次爬取,提高响应速度。

为测试方便,所有数据均缓存 15 秒。即在这个时间内的重复请求不需要再次触发爬取。

响应格式和示例

对于选手信息,同 M2.1(注意:此接口的路由已在 M2.2 中被重命名)。

对于 rating 记录,同 M2.2。

提示

要在程序中实现一个简易的缓存,可以初始化一个或多个 map 类型的全局变量。key 为 handle,value 为与此 handle 有关的具体存储的数据(数据结构自行定义)。

比如,你可以定义两个 map:

typescript
Map<string, UserInfoCache>
Map<string, UserRatingsCache>

如何在原有逻辑中插入缓存?可以按以下逻辑实现:

  • 当需要某个 handle 的指定类型数据(如选手信息)时,查询对应缓存 map 中是否存在该 key 且未过期:
    • 若是:直接返回数据
    • 若否:爬取数据,将爬取结果和过期时间(当前时间 + 有效期)存入缓存,返回爬取结果

建议完成用时

1 天。

自学参考资料关键词

  • 缓存

总结回顾检查点

  1. 缓存是什么?
  2. 有哪些常见的缓存策略?

进阶思考题

  1. 所有情况(包括异常)都要缓存吗?

由三位创世大魔法使共同写成,作为世界树记忆被封存并藉由元素脉络传播至全宇宙。