Кэш для PHP 8.1+: PSR-16 (SimpleCache) и PSR-6 (CacheItemPool) из одного пакета, бэкенды в памяти и файловый с атомарной записью, инъектируемые часы PSR-20 для детерминированного TTL в тестах. Нулевые тяжёлые зависимости.

Maintainers

Package info

gitverse.ru/cloud-castle/cache

Homepage

Issues

Documentation

pkg:composer/cloud-castle/cache

Transparency log

Statistics

Installs: 18

Dependents: 5

Suggesters: 1

v1.0.0 2026-07-19 16:38 UTC

This package is auto-updated.

Last update: 2026-07-19 18:52:07 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Cache

CloudCastle Cache

Packagist Version Downloads PHP Version License

Кэш для PHP 8.1+ с PSR-16 (SimpleCache) и PSR-6 (CacheItemPool) из одного пакета: бэкенды «в памяти» и файловый (атомарная запись), инъектируемые часы (PSR-20) для детерминированного TTL в тестах. Нулевые тяжёлые зависимости.

Установка

composer require cloud-castle/cache

Требуется PHP 8.1+.

Быстрый старт

<?php

use CloudCastle\Cache\Cache;

// PSR-16 (SimpleCache) в памяти.
$cache = Cache::array();
$cache->set('user:42', $user, 3600);        // на час
$user = $cache->get('user:42', $default);    // значение или умолчание при промахе

// PSR-16 файловый кэш с атомарной записью (temp + rename).
$cache = Cache::file('/var/cache/app');

// PSR-6 (CacheItemPool) с отложенным сохранением.
$pool = Cache::filePool('/var/cache/app');
$item = $pool->getItem('report');
if (!$item->isHit()) {
    $item->set($report)->expiresAfter(600);
    $pool->save($item);
}

// Детерминированный TTL в тестах — подмените системные часы на mock/frozen.
$cache = Cache::array($mockClock);

Возможности

  • PSR-16 (SimpleCache) и PSR-6 (CacheItemPool) из одного пакета над общим бэкендом.
  • Бэкенды: ArrayStore (в памяти) и FileStore (файлы с атомарной записью через cloud-castle/file-system — никаких частично записанных файлов).
  • Инъектируемые часы (PSR-20): истечение TTL детерминировано в тестах — «перематывайте» время FrozenClock/MockClock без реального ожидания.
  • Корректный null: попадание в кэш null отличается от промаха.
  • Валидация ключей по требованиям PSR (запрет символов {}()/\@:).
  • Нулевые тяжёлые зависимости — только PSR-контракты и cloud-castle/clock, cloud-castle/file-system.

Сравнение с аналогами

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.1.34, без Xdebug.

1. Функциональность

Возможность🏆 CloudCastlesymfonyscrapbookilluminatephpfastcachearray¹
PSR-16 (SimpleCache) из коробки
PSR-6 (CacheItemPool) из коробки
Инъектируемые часы (PSR-20) — детерминированный TTL в тестах
Атомарная файловая запись (без битых кэш-файлов)
Нулевые тяжёлые зависимости (только PSR + clock/file-system)
Всего🏆 533121

2. Безопасность и корректность

Свойство🏆 CloudCastlesymfonyscrapbookilluminatephpfastcachearray¹
Валидация ключей по PSR (запрет {}()/\@:)
Корректное хранение null (отличается от промаха)
Атомарная запись файлов (нет частичных данных)
Детерминированное истечение TTL (инъектируемые часы)
Устойчивость к битым кэш-файлам (промах вместо падения)
Всего🏆 543230

3. Производительность

set + get в кэше «в памяти», 200 000 раз (минимум из 4).

РешениеВремя (мс)Итог
array¹9базовый уровень (не библиотека)
🏆 CloudCastle110,1быстрейшее среди библиотек
illuminate146,4аналог
scrapbook382,2аналог
symfony798,1аналог
phpfastcache1 096,8аналог

4. Потребление памяти

Пик памяти на 200 000 операций (изолированный процесс, только целевая библиотека).

РешениеПиковая память (KB)Итог
🏆 CloudCastle7 024легчайшее среди библиотек
symfony7 024аналог
scrapbook7 024аналог
illuminate7 024аналог
array¹7 024базовый уровень (не библиотека)
phpfastcache7 258аналог

¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.

Вывод: CloudCastle Cache — самый быстрый среди PSR-16 библиотек и самый лёгкий по памяти, единственный дающий PSR-16 + PSR-6 с инъектируемыми часами (тестируемый TTL) и атомарной файловой записью при нулевых тяжёлых зависимостях.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano