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:

PHPapp/services/SharedMemoryService.php
Node.jsservers/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

APCuCache v rámci jednoho PHP procesu. Nejrychlejší, ale nesdílí se.
MemcachedSdí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í