Как обнаружить и отладить устаревшие записи кэша?

Это потому, что вы используете https://github.com/nikic/FastRoute маршрутизатор, и правильный синтаксис будет:

$app->get("/companies[/{search}]", \App\Handler\CompanyPageHandler::class, 'companies');

или будет более строгим и проверяет что-то в параметрах поиска как это:

$app->get("/companies[/{search:[\w\d]+}]", \App\Handler\CompanyPageHandler::class, 'companies');

5
задан Philip Morton 12 February 2009 в 12:34
поделиться

3 ответа

Лучшая вещь сделать состоит в том, чтобы поместить функцию обертки вокруг mysql_query. В этом, просто проверьте, является ли запрос обновлением или удалением к кэшируемой таблице и синтаксическим анализом ключи, которые изменяются. Это не займет много времени писать, легко протестировать и предотвратит Вас от когда-либо упущения аннулирования кэша снова.

3
ответ дан 15 December 2019 в 06:36
поделиться

Можно использовать управление оптимистичным параллелизмом, которое включает добавление еще одного столбца к таблице (или метка времени или эквивалентный, или просто простой интервал) и использование его при выполнении обновлений. Вот то, как Вы могли бы использовать его (в случае простого интервала, являющегося "тегом версии"):

update BlogPost set PublishedOn = :publishedOn, VersionTag = VersionTag + 1
where ID = :id and VersionTag = :versionTag

И принятие метки времени обновляется автоматически Вашим DBMS, это - то, как это сделано с метками времени:

update BlogPost set PublishedOn = :publishedOn
where ID = :id and Timestamp = :timestamp
0
ответ дан 15 December 2019 в 06:36
поделиться

Вы могли добавить код отладки (который отключен во время производства) в Вашем приложении, которое делает две выборки - один от memcached и один от DB, сравнивает их и выдает исключение / пишет ошибка в файл журнала, если они отличаются. Этот путь (с некоторой потерей производительности) можно быстро наблюдать старые данные.

Конечно, это может быть далее усовершенствовано:

  • Добавьте поле метки времени и не бросайте ошибку, если метки времени ближе, чем определенное значение (возможно, процесс не имел времени для обновления кэша),
  • Добавьте поле в DB, который указывает источник обновления (сценарий / номер строки). Это могло помочь в разыскивании части, которая пропускает часть аннулирования кэша
0
ответ дан 15 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: