前端&后端的存储全解析:面试怎么问,项目里怎么用?

4 阅读6分钟

大家好,我最近刚好在帮朋友整理前端和后端存储的知识点,发现这块不管是写项目还是大厂面试,都是绕不开的高频话题,所以干脆做了一份比较系统的总结,也顺手加点自己的吐槽和使用经验,方便大家查漏补缺。


先说结论:为啥需要存储?

一个网页光会展示还不够用,绝大多数业务都绕不开一个问题:怎么记住用户是谁,做了什么,要给他啥内容

不管是登录状态、购物车、个性化设置,还是离线缓存,背后都离不开“数据要放哪”这件事。

所以前端有一套存储方案,后端有一套存储方案,缓存又是后端和前端之间的“润滑剂”。你要是都搞明白了,面试提问时脑子才不会当场宕机。


前端存储,远不只是 Cookie

1. Cookie:老兵不死,但还没退役

你要是问一个后端同事“前端怎么存用户信息”,十有八九会先说 Cookie。

特点很简单:

  • 体积小,一般就 4KB 上下。

  • 自动和请求一起发给后端(所以经常用来带 Token 或 Session ID)。

  • 可以设置过期时间、作用域,甚至做跨子域共享。

  • 那么什么是Token和Session ID呢?

  • Session ID:浏览器保存一个 ID,核心信息放在服务端,典型用 Cookie 带上,适合传统网站、服务端渲染。

  • Token:信息自包含,前端保存 Token 串,放在请求头里,适合前后端分离、多端复用。

举个最土的例子:

Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict

这行意思是:

  • sessionId 是唯一标识。
  • HttpOnly 表示前端 JS 拿不到(XSS 不好偷了)。
  • Secure 表示只有 HTTPS 才发(中间人拿不到)。
  • SameSite=Strict 表示 CSRF 不好搞了。

实战:

  • 90% 的登录态都靠它或者它背后的 Session/Token 体系。
  • 埋点也喜欢用 Cookie,给你种个 ID 追踪一下。

2. LocalStorage:前端的“小仓库”

有了 LocalStorage,开发者就再也不用用 Cookie 储存什么界面偏好了。

特点:

  • 体积比 Cookie 大,一个域名一般有 5~10MB。
  • 不会自动随着请求发到后端,纯本地。
  • 不设置过期时间,除非你自己删,不然它就死活不走。

典型用法:

  • 用户选了暗黑模式,LocalStorage 里存个 theme=dark
  • 表单没填完,下次来还能找回。
  • 页面之间共享一些小数据(非敏感)。

3. SessionStorage:关了就没了

SessionStorage 和 LocalStorage 很像,但有个关键差别:

  • 它的生命周期只跟当前标签页/窗口绑死了。
  • 关了就没了,开新窗口也读不到。

通常适用的场景:

  • 做多步表单(用户填到一半刷新一下不至于全丢)。
  • 某些临时状态保存。
  • 单页应用里,页面跳来跳去时传个小数据。

4. IndexedDB:前端里的“数据库”

当本地要存的东西比 LocalStorage 大得多(几 MB 根本不够),IndexedDB 才是更优选。

核心点:

  • 可以存上百 MB,甚至 GB。
  • 是真正意义上的 NoSQL 数据库,支持索引、事务、游标。
  • 异步操作,不会卡主线程。

典型场景:

  • PWA(渐进式 Web 应用),做离线缓存。
  • 大文件管理,视频/音频的断点下载。
  • 有些搜索引擎直接把搜索索引放 IndexedDB,提高前端检索速度。

缺点: API 有点啰嗦,用起来比 LocalStorage 麻烦,不过好在有封装库可选。


后端存储,重点就是“可持久,可扩展”

前端那点存储说到底还是临时的,真正撑住业务的是后端的数据库。


1. MySQL:永远的老大哥

核心场景:

  • 用户注册、登录信息
  • 订单、支付流水、发票
  • 数据强一致性要求高的场景(要保证 ACID)

要点:

  • 结构化,表结构清晰。
  • 事务性好,最适合做金融、电商、ERP。

2. NoSQL:MongoDB 这种“不讲武德”

有些业务,关系型数据库的结构太死板了,比如:

  • 社交评论
  • 动态内容
  • 日志、埋点

这时候 MongoDB 就很常见:

  • Schema 灵活,要存啥存啥,想加字段随便加。
  • 横向扩容方便,扛大并发。
  • 天生支持 JSON / BSON,和前端数据结构比较对口。

3. 缓存:Redis 不仅仅是“临时工”

面试常考:

“Redis 你怎么用的?”

简答:

  • 放热点数据,减少 DB 压力。
  • 做 Session 存储,支撑分布式登录(SSO)。
  • 排行榜、计数器、队列都能干。

典型场景:

  • 秒杀抢购场景,库存先放 Redis 里,数据库异步减库存。
  • 用户登录状态放 Redis,挂掉重启都能快速恢复。
  • 高频访问的文章、商品详情页先读 Redis,读不到再查 DB。

Cookie 属性,面试真问到能答得出来

很多人只记住了 name=value,实际上面试官一追问:

  • 怎么设置过期时间?
  • SecureHttpOnly 有啥用?
  • SameSite 是啥?

你得像背口诀一样熟:

属性用法
Expires绝对时间,GMT 格式,过期自动失效
Max-Age相对时间,单位秒,比 Expires 优先级高
Domain限制可用域,做子域共享
Path限制路径前缀
Secure只能 HTTPS 传输
HttpOnlyJS 拿不到,防止 XSS
SameSite防 CSRF(Strict、Lax、None)

实际项目里要搞得安全点,基本组合就是:

Set-Cookie: token=xxx; Secure; HttpOnly; SameSite=Strict;

面试问到怎么答?

有人一听面试官问「你前端用什么存储」,脑子就一片空白。其实你可以这么答(顺便带场景):

“前端这块,我一般用 LocalStorage 保存非敏感用户设置,比如主题色、语言切换;
登录 Token 我更倾向放 Cookie,后端下发带 HttpOnly、Secure,防止脚本窃取和中间人攻击;
如果是需要做离线缓存的应用,比如 PWA,我会用 IndexedDB 存批量数据;
后端配套用 MySQL 做核心业务表,Redis 做缓存和分布式 Session,常见的比如做秒杀库存预扣、排行榜这种。”

这段基本够用,听起来像真写过项目。


快速小结

存储位置生命周期用法
Cookie前端+自动传服务器可配置过期登录态、埋点
LocalStorage前端永久界面偏好、草稿
SessionStorage前端当前页多步表单
IndexedDB前端永久离线缓存
MySQL后端永久核心数据
NoSQL后端永久日志、动态
Redis后端内存临时缓存热点、分布式锁

最后一句

这块内容不难,但细节一堆,面试就是爱考。
能背下来当然好,背不下来,至少在自己项目里真用过,用过了就能举例子,面试官一听就知道你不是纸上谈兵。

别嫌啰嗦,真去面试的时候,一句话多举个场景,就能拉开差距。


这篇如果对你有帮助,欢迎点个或收藏一下,咱们一起不掉链子!