文章详情页
java - 怎样优化接口返回大体量数据?
浏览:232日期:2023-12-13 14:53:33
问题描述
需求描述:
外围平台调用接口根据手机号查询用户的歌单推荐信息,每个用户会有一千条左右的推荐信息,每条推荐信息包括了,歌曲ID、歌曲名称、版权ID、试听地址字段。
我需要关联多张表查询,每次查询时间大概4s左右,查询出来后还需要组装数据,然后才返回接口。
返回格式是json。这样的话接口返回会比较慢。
想过提前将数据放redis集群,但是后来否定了,因为用户量大概是500多万,每个用户的推荐信息大小大概200kb,存redis的话会耗费大量的内存,所以否定了。但是想不到其它给好的处理方法,请各位大神帮忙看看这样一个需求有什么好的处理建议吗?感谢!
问题解答
回答1:瓶颈出在查询很多张表需要4秒上,这里面的逻辑有可以优化的点吗?如果没有那么这4秒必须花费,其他的数据传输格式,网络通信时间再优化也无法小于4秒了。要么在客户端在某个用户无感知的情况下发推荐请求,要么优化查询逻辑。
回答2:你链表查询,把你的sql贴出来,另外为什么不分开查询呢?估计你耗时在SQ
回答3:1.一次返回一千条?一次50条会不会快点呢?多次分页请求呢?2.觉得直接把缓存方案否了不妥,500多w的用户,并不都是活跃用户,估算出活跃用户的量的redis可以接受不?3
回答4:在【推荐信息】上添加ID属性,保存在redis,这个量应该不会大。
每个用户推荐的信息也存在redis上,但是只保存1000个【推荐信息】的ID。
这样的话就不会造成每个用户的推荐信息有200kb了。
标签:
java
相关文章:
1. android - 为 AppBarLayout 设置的背景图片 TransitionDrawable 为什么只在第一次打开的时候有效?2. mysql - 我的myeclipse一直连显示数据库连接失败,不知道为什么3. docker网络端口映射,没有方便点的操作方法么?4. nginx - 关于javaweb项目瘦身问题,前期开发后,发现项目占用存贮空间太大,差不多1.2个G,怎么实现瘦身,动态页面主要是jsp。5. java - 请教一个IO的问题6. angular.js - angular内容过长展开收起效果7. java - 一个泛型标签问题8. node.js - 问个问题 Uncaught (in promise)9. jquery - 移动端如何写弹性效果10. node.js - 安装puer前端服务器不成功
排行榜

网公网安备