Putting it all together
So now we have the required setup for gateway cache (or reverse proxy cache) and Doctrine cache. Let's see how we can apply both of them to a specific page.
Let's say we are inside the project page; some parts of it rarely change, such as the project title and descriptions, and some parts of it change a lot, such as new tasks, finished tasks, and current tasks.
Let Doctrine take care of the required metadata, query, and result caches on the database side and feed them to the template. We can define a relatively long expiry period for the page itself and feed it to the gateway cache. However, there is a problem here.
As the dynamic parts of the page change faster than other parts, we won't be able to see the real updates to that page.
If we try to fix the problem by making the expiry time shorter and adding a validation strategy, we will have another problem. As the page will be modified more often, the gateway cache states will turn stale more than they should and add...