имя файла - md5 от sql запроса, содержимое файла - сериализованные массив из двух параметров
Поздравляю, вы почти изобрели штатный для mysql Query cache, он работает абсолютно так же, только в памяти. Зато у которого нет проблем с инвалидацией результатов и некешируемыми запросами.
Как кеширование делается нормально: у нормального кеширования нет времени жизни. Вообще. Нормально работающий кеш инвалидируется только по внешним условиям (что-то изменили в товаре - инвалидировали). Или по LRU (т.е., память кончилась)
Кешируете товары каждый отдельно от других. Инвалидируются потому элементарно, что изменилось - того и сбрасываете. А чтобы не было пары сотен промахов кеша на ровном месте - то наоборот, не инвалидируете кеш - а обновляете его.