Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

PHP Counter

Выложил на github.com свой класс Counter.

В основном сделал это, чтобы потестить сам GitHub.

Адрес страницы на гитхабе: http://github.com/valmat/MC_Counter

Как использовать

Класс Counter — это образец реализации счетчика на memcache.

Можно построить другие реализации на общем интерфейсе.
Сохранение результатов применения значений счетчика осуществляется по заданному числу.
Можно реализовать сохранение по заданному интервалу времени.

  • Конструктор принимает три аргумента: ключ, имя слота и идентификатор для инициализации слота.
  • Для чего это сделано: инкремент счетчика должен быть очень быстрой операцией.
  • Не целесообразно тратить время и системные ресурсы на создание объектов, которые не будут использованы.
  • Поэтому передается только имя класса слота, который создается только в случае необходимости.
  • К таким случаям относится обмен данными между локальным и постоянным хранилищем счетчика.
  • Слоты необходимы, так как Counter не может знать о способе хранения данных в постоянном хранилище и путях доступа к ним.
  • Для предотвращения состояния гонки необходим механизм блокировок.
  • При наличии блокировки процессы, не получившие эксклюзивные права на получение данных, будут писать во временное хранилище, а процесс, установивший блокировку, по окончании своей работы инкрементирует счетчик данными из временного хранилища.
  • При сбросе данных в постоянное хранилище по условию достижения кратности значения счетчика ($this->Val % $this->upd_delim), блокировка не требуется, так как в этом случае (при достаточно большом значении $this->upd_delim) в текущий момент времени только один процесс приходит к необходимости сброса данных.

Пример использования

$cnt = new Counter('anykey', 'AnySlot', 15);
echo $cnt->increment();
echo $cnt->get();
echo $cnt->set(11);