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 天。
自学参考资料关键词
- 缓存
总结回顾检查点
- 缓存是什么?
- 有哪些常见的缓存策略?
进阶思考题
- 所有情况(包括异常)都要缓存吗?