I made some code public that does what you describe: it is a simple cache interface that has implementations for in-memory, memcache and the datastore. You get about 100MB of heap space to use which can significantly speed up your caching. There is also a CompositeCache class that allows you to layer the caches so that it first checks in-memory, then memcache , then the datastore. Puts go to all levels and cache hits refresh the higher levels. e.g. if an item is not in-memory and has been flushed from memcache but is still present in the datastore then the other two will be updated.