Rub your eyes and look at what you are discussing: a WebApp and a Server that communicate across a network.
That is literally two separate applications with a network interface.
This query takes about 30 seconds to run which is a bad experience.
What actions have you taken to improve the performance of this query?
Hiving the results off into a cache is just kicking this particular Problem's "can" further down the road.
... a query with lots of inner joins ...
Lots of joins do not imply a poorly performing Query.
First the report could be out of date if the user hits the cache after updating data
An update operation should also invalidate the cache. With proper invalidation, you'll always have up to date results.
Second the first page load after the ttl expires will be slow.
It depends on what you cache. If you cache the final result, this means indeed that you'll ...