开发中经常遇到这样的场景:用户上传一张头像,预览时需要生成一个缩略图;或者表单填写中途保存草稿,下次打开还能继续。这些数据用完就扔,生命周期短,到底该不该放进缓存?
什么是临时数据
临时数据指的是那些只在特定时间段内有效、后续可能被丢弃或更新的信息。比如验证码、会话状态(session)、页面临时计算结果、接口调用的中间值等。它们共同的特点是:时效性强、重复访问概率高、长期存储意义不大。
缓存的本质是空间换时间
缓存的核心逻辑不是“能不能存”,而是“值不值得存”。哪怕数据只存在几分钟,只要在这段时间里会被多次读取,缓存就能减少重复计算或数据库查询,提升响应速度。
举个例子:用户登录时输入手机号,系统发送短信验证码。这个验证码通常5分钟内有效。如果每次校验都去查数据库,10万并发请求可能压垮服务。但如果把验证码存进 Redis,设置 TTL 为300秒,读取速度快,压力直接下降一个量级。
redis.setex("verify_code:13800138000", 300, "123456")
临时数据反而更适合缓存
很多人觉得“临时=不重要”,其实恰恰相反。临时数据往往出现在高频交互环节,比如按钮点击后的防抖处理、购物车未提交前的状态、网页滚动时的懒加载占位图。这些场景对响应速度要求极高,缓存能显著改善体验。
再比如前端开发中的 debounce 函数,连续触发的搜索请求,可以把上一次的结果暂存起来。用户还没打完字就又删掉,这时候从内存拿个旧结果比发新请求还快,界面更流畅。
需要注意的问题
虽然适合缓存,但得控制好生命周期。不能因为数据临时就放任不管,否则内存越积越多,最终拖慢整个系统。一定要设置过期时间(TTL),让缓存自动清理。
另外,别把本地内存当万能方案。Node.js 用 Map 存临时数据没问题,但如果服务是分布式的,用户这次请求落在 A 实例,下次落到 B 实例,Map 就失效了。这时候就得上 Redis 这类集中式缓存。
还有些特殊情况,比如敏感信息如身份证预览图,即使临时也不能随便缓存,尤其是浏览器端。一不小心就被截屏或泄露,得权衡安全和性能。