Область применения: сайт на основе PHP-mysql, использующий memcached.
Проблема кеширования в основном связана с ценами.Из-за расчета цены, который напрямую связан с тем, какая комбинация факторов, включая конкретную комбинацию продуктов, возможны МНОЖЕСТВО возможных цен.
Когда одно из чисел, необходимых для расчета цены,обновлено, многие кэшированные элементы должны быть признаны недействительными.Не все комбинации находятся в кеше, и поместить их все туда невозможно или, по крайней мере, не нужно.
Я хочу сделать недействительными (или обновить) все цены, связанные с этим отдельным продуктом.Поскольку они представляют собой комбинации, это не простой факт признания недействительными ключей с определенным именем, например $productId_price
ofcourse (см. Пример).
Моя идеальная ситуация - иметь возможность пометить записи в кэше всеми продуктамикоторые влияют на эту запись, поэтому я могу «найти» их всех.
Подводя итог / как пример:
У меня есть 15 продуктов # .Из этих продуктов в моем кеше в настоящее время есть:
1) "price_product1_product2" => 200
2) "price_product1_product3" => 300
3) "price_product5_product12" => 250
4) "price_product4_product1_product12" => 203
Теперь продукт 1 стал для нас дороже покупать, поэтому все цены, основанные на этом продукте, требуют пересчета.Я не хочу переходить на КАЖДУЮ возможную комбинацию, которая включает product1
, потому что она будет включать слишком много ключей, большинство из них даже не должно быть в кеше.
Одно решение, которое я придумал, но котороене поддерживается memcached, помечает записи 1, 2 и 4 кэша как «product1» (а также с другими продуктами конечно), так что я мог легко их найти.Я мог бы подражать этому поведению, сохраняя все используемые ключи в базе данных, но я боюсь, что это только замедлит работу, а скорость - одна из причин кеша.
Что было бы решением для этого?
Существуют ли другие системы кеша, которые могут сделать это?
Есть ли способ быстро сделать это с текущей настройкой?
советы?
# У меня естьбольше продуктов конечно:)