抽象 cache 层