(The following assumes you're asking about the tradeoffs between memcache and the datastore, not memcache and static variables within runtime instances; the latter is addressed in Thilo's link.)
The reason that the memcache service is used is that it is significantly faster, on average, than the datastore. For example, consider the statistics yesterday for datastore and memcache. For the datastore, get operations averaged about 32ms, puts ~35ms, and deletes 60ms. For memcache, it was roughly 8ms, 17ms, and 10ms. (Furthermore, those statistics are based on test operations which are about 5x larger for memcache). If latency or instance-hours matter to your app, memcache can be very beneficial.
That said, memcache isn't reliable. You should always assume that data written to memcache may disappear at any time, and for reasons beyond your control. Whereas datastore operations are effectively guaranteed to be permanent.
In short: use the datastore if correctness is at all important for your need, and memcache if speed is of the essence. Better yet, use both!