51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在大数据平台中,前端如何设计API请求策略以支持高频数据查询(如每秒数百次请求)?请说明如何实现数据缓存,并讨论缓存更新策略(如LRU、TTL)对大数据场景的影响。

湖北大数据集团前端开发岗难度:中等

答案

1) 【一句话结论】在大数据平台高频数据查询场景下,前端需通过“分层缓存(浏览器+CDN+服务端)+请求策略(预取/批量/合并)+智能缓存更新(LRU/TTL结合)”,平衡性能与一致性,核心是“分层缓存+请求优化+动态更新策略”。

2) 【原理/概念讲解】
老师:同学们,高频数据查询的核心痛点是“并发高、延迟敏感”。要解决这个问题,前端设计API请求策略需从三方面入手:

  • API请求策略:通过“预取”(提前请求热门数据,如热门报表)、“批量请求”(合并多个小请求为一个大请求,减少网络开销)、“请求合并”(类似GraphQL聚合,减少接口调用次数)来优化请求效率。
  • 数据缓存:采用“分层缓存”架构,从客户端到服务端逐层缓存:
    • 浏览器缓存(HTTP缓存头,如Cache-Control):缓存静态资源(CSS/JS)或不常变动的数据(如配置文件),减少重复请求。
    • CDN缓存(边缘节点缓存):降低请求延迟,分担源站压力,适合大流量、热点数据(如热门页面数据)。
    • 服务端缓存(如Redis):提升数据库查询效率,支持高频动态数据(如实时统计、用户列表),是高频查询的核心缓存层。
  • 缓存更新策略:结合LRU(最近最少使用)和TTL(生存时间)优化缓存一致性:
    • LRU:动态淘汰最久未使用的缓存项,适合“冷热数据分离”(如热门数据保留,冷数据淘汰),但需实现哈希表+双向链表的数据结构。
    • TTL:缓存项在设置时间后自动失效,适合“定期更新的数据”(如日度统计报表),需定时清理避免内存泄漏。

3) 【对比与适用场景】

缓存策略定义特性使用场景注意点
LRU最近最少使用算法,淘汰最久未使用的缓存项动态淘汰,缓存命中率随数据访问模式变化热门数据(如热门报表、常用配置)需实现LRU数据结构(哈希表+双向链表),复杂度较高
TTL生存时间,缓存项在设置时间后自动失效静态失效,适合定期更新数据定期更新的数据(如日度、周度统计)需定时清理,避免内存泄漏
分层缓存(浏览器+CDN+服务端)多层缓存架构分层处理,从客户端到服务端逐层缓存高频查询场景(如大数据平台实时统计)需统一缓存策略,避免数据不一致

4) 【示例】
假设查询“用户列表”,前端请求流程如下:

  • 步骤1:检查浏览器缓存(localStorage),若命中则直接返回数据。
  • 步骤2:若未命中,请求CDN(通过请求头判断),若CDN缓存命中则返回,否则继续下一步。
  • 步骤3:请求后端API,同时将数据存入服务端Redis(设置TTL=5分钟),并同步到浏览器缓存。
  • 后续请求:优先从服务端Redis获取数据,若缓存失效则从数据库拉取并更新(LRU淘汰旧数据)。

伪代码(前端):

async function fetchUserList() {
  // 1. 浏览器缓存检查
  const cached = localStorage.getItem('userList');
  if (cached) return JSON.parse(cached);

  // 2. CDN缓存检查(假设通过请求头判断)
  const cdnRes = await fetch('/api/user-list', { cache: 'no-cache' });
  if (cdnRes.ok) {
    const data = await cdnRes.json();
    localStorage.setItem('userList', JSON.stringify(data));
    return data;
  }

  // 3. 请求后端API,更新服务端缓存
  const apiRes = await fetch('/api/user-list');
  if (apiRes.ok) {
    const data = await apiRes.json();
    // 存入服务端Redis(TTL=5分钟)
    redis.set('userList', JSON.stringify(data), 'EX', 300);
    // 存入浏览器缓存
    localStorage.setItem('userList', JSON.stringify(data));
    return data;
  }
  throw new Error('Failed to fetch user list');
}

5) 【面试口播版答案】
在大数据平台高频数据查询场景下,前端设计API请求策略的核心是“分层缓存+请求优化+动态更新”。首先,分层缓存:浏览器缓存处理静态/不常变动的数据,CDN缓存降低延迟,服务端缓存(如Redis)提升数据库效率。请求策略上,采用预取(提前请求热门数据)、批量请求(合并小请求为大请求)减少网络开销。缓存更新策略用LRU和TTL结合:LRU淘汰冷数据,适合热数据;TTL定期更新,适合定期统计。比如查询用户列表,前端先检查浏览器缓存,若没命中则请求CDN,再请求后端,同时将数据存入服务端Redis(TTL 5分钟),后续请求优先从Redis获取,缓存失效时从数据库拉取并更新(LRU淘汰旧数据)。这样既保证高频查询的低延迟,又避免缓存一致性问题。

6) 【追问清单】

  • 问题1:缓存穿透如何解决?
    回答要点:设置空对象或默认值,结合布隆过滤器过滤无效请求。
  • 问题2:缓存雪崩如何应对?
    回答要点:设置随机TTL,或使用分布式锁控制并发更新。
  • 问题3:LRU在并发场景下的实现难点?
    回答要点:需实现哈希表+双向链表的数据结构,保证并发下的数据一致性。
  • 问题4:不同缓存策略在大数据场景下的性能对比?
    回答要点:服务端缓存(Redis)适合高频动态数据,CDN适合静态热点数据。
  • 问题5:数据更新频率很高时,TTL如何设置?
    回答要点:TTL设短(如1分钟),或用缓存更新通知(如消息队列)实时同步。

7) 【常见坑/雷区】

  • 忽略缓存一致性导致数据不一致(如前端从缓存拿旧数据)。
  • 只考虑性能忽略可用性(如缓存失效时无降级策略)。
  • 缓存策略选择不当(如用TTL处理实时数据,导致数据延迟)。
  • 未考虑并发场景下的缓存竞争(如多个请求同时更新缓存)。
  • 缓存未清理导致内存泄漏(如TTL未设置或过期数据未清理)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1