caching techniques for applications