PSR-6 Cache Integration#

Why PSR-6 Here#

Campaign rule tracking now uses PSR-6 CacheItemPoolInterface directly.

This gives you:

  • framework interoperability,

  • pluggable in-memory/distributed stores,

  • and cleaner integration with existing cache infrastructure.

Using the Built-in Memory Pool#

<?php
use Infocyph\Draw\Draw;
use Infocyph\Draw\State\MemoryCachePool;

$draw = new Draw();

$result = $draw->execute([
    'method' => 'campaign.run',
    'items' => ['gold' => ['count' => 1]],
    'candidates' => ['u1', 'u2', 'u3'],
    'options' => [
        'rules' => ['perUserCap' => 1],
        'cachePool' => new MemoryCachePool(),
    ],
]);

Using an External PSR-6 Pool#

Any PSR-6 pool is accepted:

<?php
use Infocyph\Draw\Draw;
use Psr\Cache\CacheItemPoolInterface;

/** @var CacheItemPoolInterface $pool */
$pool = getYourFrameworkCachePool();

$draw = new Draw();

$result = $draw->execute([
    'method' => 'campaign.batch',
    'candidates' => ['u1', 'u2', 'u3', 'u4'],
    'options' => [
        'cachePool' => $pool,
        'rules' => ['perUserCap' => 1],
        'phases' => [
            ['name' => 'phase_1', 'items' => ['a' => ['count' => 1]]],
            ['name' => 'phase_2', 'items' => ['b' => ['count' => 1]]],
        ],
    ],
]);

Concurrency Note#

Rule counters use read-modify-write increments through the pool API.

For high-concurrency workloads, prefer a backend that supports strong concurrency behavior in your deployment model.