Redis - после исполнения запроса записываем в Redis в виде:
ключ - хэш запроса
значение - сеарилизованный ответ бызы данных
время жизни - время валидности данных
При каждом новом запросе сначала проверяем Redisку. Нашли - возвращаем из кэша, нет - лезем в базу и кэшируем результат