How to mix expiration and validation strategies
Imagine that we want to keep the cache fresh for ten minutes and simultaneously keep an eye on any changes over user projects or finished tasks. It is obvious that tasks won't finish every ten minutes and it is far beyond reality to expect changes in the project status during that period.
So what we can do to make our caching strategy efficient is combine expiration and validation and apply them to the dashboard controller as follows:
// src/CoreBundle/Controller/DashboardController.php <?php //... /** * @Cache(expires="600") */ class DashboardController extends Controller { /** * @Cache(ETag="userProjects ~ finishedTasks") */ public function indexAction() { //... } }
Keep in mind that expiration has a higher priority over validation. In other words, the cache is fresh for 10 minutes, regardless of the validation status. So when you visit your dashboard for the first time, a new cache plus a 302 response (not modified) is...