缓存是把常用或频繁访问的数据,临时存放在读取更快的位置,以避免每次都回到数据源头重新获取。它不是某一项具体技术,而是广泛存在的一种思路。
基本机制
当程序需要一份数据时,先看缓存里有没有。有,就直接取用,这一步通常很快;没有,就去源头取,同时把结果留存在缓存里,供下次使用。
缓存的代价是一致性问题:源头的数据变了,缓存里的还是旧的。因此除了存和取,还要决定什么时候让它失效、什么时候主动更新。
它出现在哪些地方
- 浏览器:把图片、样式、脚本等文件留在本地,再次访问同一站点时不必重新下载。
- 网络节点:内容分发网络的节点保存副本,就近响应访问请求。
- 应用内部:把数据库查询的结果暂存在内存中,减少重复查询。
- 数据库自身:部分系统内部带有查询结果缓存机制。
这几种缓存往往同时存在。一次访问提速,通常不是某一层的作用,而是多层叠加的结果。
失效与更新策略
常见做法有几种:按时间设定有效期,到期后重新获取;按使用情况淘汰,优先保留最近或最常被访问的内容;在数据更新时主动清除对应缓存。选择哪种,取决于内容变化的频繁程度——变动少的内容适合较长的有效期,实时性要求高的则不适合久留。
为什么更新后看不到变化
网站内容更新后,自己打开却还是旧页面,多数情况是缓存尚未过期。可以尝试强制刷新、清除浏览器缓存,或等待有效期结束。这也解释了为什么内容上线后,不同地区、不同用户看到更新的时间可能不一致。
使用时注意什么
缓存能明显减轻服务器压力、提升打开速度,但设置得当需要区分内容类型:稳定的图片、样式和脚本适合长缓存;经常变化的价格、库存、新闻列表则应当短缓存或不缓存。把时效性内容错误地长期缓存,会给使用者带来困扰,这类问题往往比“慢一点”更难排查。
