Лучше не нагружать БД лишней работой (кэшированием), которую можно сделать в другом месте. Масштабирование БД - более сложная работа, чем масштабирование кода. Поэтому, кэшировать лучше в коде, а не в СУБД (который, кстати, и так использует кэш).
Лучше кэшировать запрос как можно раньше. Например, запрос получает 5 запросов в БД, лучше делать один кэш всех пяти запросов в БД, чем пять разных кэшев каждого из запросов.
Как сделать работу с кэшем удобнее - см. другой ответ
Symfony и Redis куда писать логику получения кэша?