Storage: API и эксплуатация
Нужны PHP 8.2+ и Localzet Server ^7.0. new localzet\Storage\Server($ip = '127.0.0.1', $port = 8008, $allowObjectSerialization = false) создаёт frame listener с одним worker. new Client($servers, $allowObjectSerialization = false) принимает один host:port или массив адресов.
Операции и размещение
| Метод | Поведение |
|---|---|
set($key, $value) | Записать значение |
get($key) | Прочитать значение или null, если ключ отсутствует |
add($key, $value) | Записать только если ключ ещё не установлен |
cas($key, $old, $new) | Условная замена при совпадении старого значения |
increment($key, $step = 1) | Изменить числовое значение |
delete($key) | Удалить значение |
Можно использовать свойства клиента ($client->key = $value, $value = $client->key), но методы удобнее для явной обработки возвращаемого результата. При нескольких серверах адрес выбирается по CRC32 ключа. Изменение или перестановка списка узлов меняет распределение; автоматической миграции данных нет.
Wire format и границы безопасности
Протокол использует длино-префиксированные PHP serialized frames без аутентификации и шифрования. Значения в сети должны быть совместимы с PHP serialization. Десериализация объектов выключена по умолчанию на клиенте и сервере; включение allowObjectSerialization: true с обеих сторон разрешено только для доверенной изолированной сети, где каждый peer контролируется тем же владельцем.
Оставляйте listener на loopback или закрывайте его ACL/firewall. Не выставляйте порт 8008 в Интернет и не отправляйте неограниченные payload: протокол не предоставляет клиентской авторизации, TTL API, лимита памяти или долговременного хранения. Все данные в RAM одного процесса; они пропадают при остановке. Масштабирование узлами — шардирование, а не репликация.
Перед внешним использованием отдельно проверьте конкурентные записи, timeout/recovery и поведение при потере узла. Не считайте локальную сериализационную regression-проверку защитой сети.

