缓存与外存
date
Aug 15, 2025
slug
operate-memory-with-safety
status
Published
tags
coding
summary
type
Post
我们很容易把缓存与外存混为一谈。一个很直观的例子,浏览器中的localstorage究竟是缓存还是外存?
如果客户端程序每次启动时都会读取localstorage,并将其中的值加载到内存,那么localstorage对该程序而言便是外存。如果程序每次在启动时将运行期间产生的数据存入localstorage,又在退出时将属于其的localstorage清空,那么localstorage对其来说则是缓存。
概念而言,外存是程序外部的存储来源,就层次而分,由外向内又可分为物理层,网络层,文件系统层,数据库层,宿主程序层等。读写外存时,我们需要考虑唯一事实的来源,以及外存作为程序外部的依赖,当其故障时程序的运行策略应该如何设计。缓存则是一个更为广泛的定义,缓存既可以设计在程序内部,也可以依赖于程序外部。引入缓存时,存储的分层直观的在程序内伸展。
无论是缓存还是外存,在测试时都是相当棘手的对象。外存并不来源于程序本身,意味着在测试时我们不仅要加载程序还要加载好程序的外存环境。设施型的外存,例如Postgres数据库,可以被单独测试也可被替换以做打桩测试。至于涉及缓存的测试,有时比刚刚所说的情况更为复杂,缓存可以理解为带状态的程序快照,我们需要在测试时将程序的状态准备好,不同的方法效率与可靠性差别很大。