Flush cache only for changed pages
You can achieve this by setting a very high default TTL (expire time) and then invalidating the cache only for modified content. The Varnish module and the Cache Actions module are useful tools for that purpose.

Fabian Sörqist, maintainer of the Cache Actions module, has written a detailed article about it here: http://dev.nodeone.se/en/caching-with-varnish-drupal-7-and-cache-actions