Designing Caching Mechanisms For Distributed And Dynamic Systems