API / интерфейс кеширования для использования в качестве модели - PullRequest
4 голосов
/ 30 марта 2012

Я пишу кеширующий API на PHP.Он делает все, что мне нужно, но я возвращаю его в проект, где другие люди могут использовать его для других целей.В обзоре кода меня попросили убедиться, что в нем есть все стандартные методы, которые можно ожидать в API кеширования.

Я смотрел на PHP Memcache API, Zend API для кэширования и некоторые другие,и на самом деле, похоже, нет стандарта.Они, конечно, не согласны с именами методов (read() против get() против и т. Д.).

Итак, я должен просто убедиться, что могу выполнять операции CRUD и называть это днем?Добавьте flush() для хорошей меры?

Или есть какая-то стандартная универсальная модель, которую я могу использовать для API кэширования?

Или я должен пойти к мату и строго поспорить, чтомы не должны ничего реализовывать, пока это на самом деле не нужно?

1 Ответ

1 голос
/ 30 марта 2012

Какой бэкэнд вы используете для кеша? Memcached? Redis? APC? Плоские файлы?

  • Если вы собираетесь поддерживать только один бэкэнд (например, Memcached), вам, вероятно, следует как можно точнее следовать методам этого частичного бэкэнда.

  • Если вы собираетесь поддерживать несколько бэкэндов, ваши основные методы, вероятно, должны иметь общий знаменатель среди них всех.

Что касается "стандарта", большинство людей будет искать SET с необязательным сроком действия, GET, EXISTS, DELETE, FLUSH и (если возможно) INCREMENT / DECREMENT с одинаковыми именами методов. Эти методы доступны практически в каждом API кеширования. Но что-то еще будет зависеть от того, что поддерживает бэкэнд.

Например, Memcached поддерживает CAS, APPEND и атомарный ADD / REPLACE, но многие другие серверы не поддерживают. Даже если вы взломаете подобные методы на бэкэнд, который их не поддерживает, результирующие операции не будут атомарными, что может привести к незначительным ошибкам в будущем. Проблема не в том, что они еще не нужны. Проблема в том, что они будут глючить, если будут добавлены на сервер, который их не поддерживает.

Zend_Cache очень сложен, потому что он поддерживает практически все мыслимые бэкэнды и включает множество трюков, чтобы заставить их вести себя одинаково Например, он интенсивно использует блокировку, чтобы предотвратить возможные условия гонки с плоскими операциями с файлами. Но вам, вероятно, не стоит изобретать велосипед, если вы к этому стремитесь.

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