APCu
Třída Moony\bootstrap\core\services\APCu je statická obálka nad PHP APCu cache. Vhodné pro cache v rámci jednoho PHP procesu (nesdílí se mezi procesy).
| APCu::get(string $key) | Vrátí hodnotu nebo null |
| APCu::set(string $key, mixed $value, int $ttl = 0) | Uloží hodnotu. TTL 0 = neexpiruje. |
| APCu::has(string $key) | Vrátí true pokud klíč existuje |
| APCu::delete(string $key) | Smaže klíč |
use Moony\bootstrap\core\services\APCu;
// Cache výsledku dotazu na 5 minut
$users = APCu::get('users_list');
if($users === null) {
$users = UserRepository::getAll();
APCu::set('users_list', $users, 300);
}
Memcached
Třída Moony\bootstrap\core\services\Memcached je statická obálka nad PHP Memcached rozšířením. Sdílí data mezi procesy a servery. Připojení je lazy (při prvním použití).
| Memcached::get(string $key) | Vrátí hodnotu nebo null |
| Memcached::set(string $key, mixed $value, int $expiration = 0) | Uloží hodnotu. Expiration v sekundách, 0 = neexpiruje. |
| Memcached::has(string $key) | Vrátí true pokud klíč existuje |
| Memcached::delete(string $key) | Smaže klíč |
Pro komunikaci mezi PHP a Node.js servery nepoužívejte Memcached přímo. Použijte SharedMemoryService.
SharedMemoryService
Třída Moony\app\services\SharedMemoryService je aplikační wrapper nad Memcached určený pro sdílení dat mezi PHP a Node.js servery. Existuje ve dvou implementacích se shodným API:
| PHP | app/services/SharedMemoryService.php |
| Node.js | servers/app/services/SharedMemoryService.js |
Textová data
| SharedMemoryService::set(string $key, $value, int $ttl = 300) | Uloží textová data. Výchozí TTL 5 minut. |
| SharedMemoryService::get(string $key) | Přečte textová data. Vrátí string nebo null. |
| SharedMemoryService::delete(string $key) | Smaže klíč |
use Moony\app\services\SharedMemoryService;
// PHP strana — uložení
SharedMemoryService::set('live_score', json_encode($scores), 60);
// PHP strana — čtení
$scores = json_decode(SharedMemoryService::get('live_score'), true);
// Node.js strana — čtení stejných dat
import { SharedMemoryService } from '../services/SharedMemoryService.js';
const scores = JSON.parse(await SharedMemoryService.get('live_score'));
Binární data (msgpack)
Pro efektivní sdílení strukturovaných dat mezi PHP a Node.js se používá msgpack serializace. Rychlejší a kompaktnější než JSON.
| SharedMemoryService::setBinary(string $key, $value, int $ttl = 300) | Serializuje data přes msgpack a uloží |
| SharedMemoryService::getBinary(string $key) | Přečte a deserializuje msgpack data. Vrátí mixed nebo null. |
// PHP — uložení binárních dat
SharedMemoryService::setBinary('fixtures', $fixturesArray, 120);
// PHP — čtení
$fixtures = SharedMemoryService::getBinary('fixtures');
// Node.js — čtení stejných binárních dat
const fixtures = await SharedMemoryService.getBinary('fixtures');
Binární data přes msgpack jsou ideální pro velké datové struktury (pole, vnořené objekty) sdílené v reálném čase mezi PHP a Node.js servery.
Kdy co použít
| APCu | Cache v rámci jednoho PHP procesu. Nejrychlejší, ale nesdílí se. |
| Memcached | Sdílená cache mezi PHP procesy. Přímý přístup — jen pro PHP. |
| SharedMemoryService (text) | Sdílení textových dat PHP ↔ Node.js |
| SharedMemoryService (binary) | Sdílení strukturovaných dat PHP ↔ Node.js — rychlé, kompaktní |
