Группировка / пометка кэшированных значений для аннулирования / пересчета - PullRequest
0 голосов
/ 25 марта 2011

Область применения: сайт на основе 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» (а также с другими продуктами конечно), так что я мог легко их найти.Я мог бы подражать этому поведению, сохраняя все используемые ключи в базе данных, но я боюсь, что это только замедлит работу, а скорость - одна из причин кеша.

Что было бы решением для этого?
Существуют ли другие системы кеша, которые могут сделать это?
Есть ли способ быстро сделать это с текущей настройкой?
советы?

# У меня естьбольше продуктов конечно:)

Ответы [ 2 ]

0 голосов
/ 03 июня 2011

Друг указал мне на эту опцию memcached-tag .Это похоже на очень близкий ответ на вопрос.Мы не будем использовать это очень скоро, потому что он довольно старый и, похоже, не находится в активной разработке.

0 голосов
/ 01 апреля 2011

Текущий консенсус (в автономном режиме), по-видимому, заключается в том, что такой доступной кэш-системы по умолчанию не существует. Наиболее близким решением было бы использование некоторой базы данных форм (NoSQL, MongoDB) и код для нее самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...