使用 Go 优化我们的接口
标题起的是有点大,不过还好本片文章主要也是使用 Go 来优化 HTTP 服务的,也算打个擦边球吧~
背景
特征数据暴增,导致获取一个城市下所有的特征的接口延时高,下面是监控上看到的接口响应耗时,最慢的时候接口响应时间能达到 5s 多。
![800c4be495d851d1ed7c4a2bc65a978e.png](https://i-blog.csdnimg.cn/blog_migrate/1b9727102b32ae0dad99524d785885ff.jpeg)
缓存优化方案
代码优化思路:
1,使用缓存。
1.1为什么使用内存,而不是 Redis?
分析业务需求,当前需要存储起来的数据是ObjectId,ObjectId 是一个长度为14左右的字符串,我们假设平均下来ObjectId是长度为16的字符串,这样算下来就是每个 ObjectId 占用的内存大小是2个字节,当前业务需要存储的ObjectId大概是30万条,这样算下来当前业务需要存储的 ObjectId 要占用的内存在 0.5M 完全可以在内存中进行操作。相比于使用 Redis 来说没有网络开销,效率更高。
1.2 缓存初始化:当服务启动时,本地缓存初始化为空。
1.3 关于缓存版本的概念。
缓存版本是离线特征生产任务更新后将数据版本更新到 DB 中。
下面三种方案都是基于内存存储 ObjectId 数