PHP code example of noizu-labs / fragmented-keys

1. Go to this page and download the library: Download noizu-labs/fragmented-keys library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

noizu-labs / fragmented-keys example snippets


use NoizuLabs\FragmentedKeys\Key\StandardKey;
use NoizuLabs\FragmentedKeys\Tag\StandardTag;

$globalGreetingTag = new StandardTag("Global.Greeting", "global");
$userUserNameTag = new StandardTag("User.Username", $userId);
$keyObj = new StandardKey(
    "CacheDataThatInvalidatesWhenUserNamesAreChanged",
    [$userUserNameTag, $globalGreetingTag],
);
$cacheKey = $keyObj->getKeyStr();

$userUserNameTag = new StandardTag("User.Username", $userId);
$userUserNameTag->increment();

$globalGreetingTag->increment();

use NoizuLabs\FragmentedKeys\CacheHandler\APCuHandler;
use NoizuLabs\FragmentedKeys\CacheHandler\MemcachedHandler;
use NoizuLabs\FragmentedKeys\Configuration;
use NoizuLabs\FragmentedKeys\Tag\StandardTag;

$m = new \Memcached();
Configuration::setDefaultCacheHandler(new MemcachedHandler($m));
Configuration::setGlobalPrefix("MyApp");

// you may override the handler per tag by calling
$tag->setCacheHandler($alternativeHandler);

// or by passing a handler to the constructor.
$tag = new StandardTag("Users", "1234", null, new APCuHandler());

use NoizuLabs\FragmentedKeys\CacheHandler\APCuHandler;
use NoizuLabs\FragmentedKeys\CacheHandler\MemcachedHandler;
use NoizuLabs\FragmentedKeys\CacheHandler\MemoryHandler;
use NoizuLabs\FragmentedKeys\CacheHandler\RedisHandler;

$apcuHandler     = new APCuHandler();
$inMemoryHandler = new MemoryHandler();
$memcachedHandler = new MemcachedHandler(new \Memcached());
$redisHandler    = new RedisHandler(new \Redis());


use NoizuLabs\FragmentedKeys\CacheHandler\MemcachedHandler;
use NoizuLabs\FragmentedKeys\CacheHandler\MemoryHandler;
use NoizuLabs\FragmentedKeys\Key\StandardKey;
use NoizuLabs\FragmentedKeys\KeyRing;
use NoizuLabs\FragmentedKeys\Tag\ConstantTag;
use NoizuLabs\FragmentedKeys\Tag\StandardTag;

    //=================================================
    // Config stuff you only need to do this once
    //=================================================
    /* Somewhere in your bootstrap or wherever you instantiate a KeyRing or KeyRing-derived class */
    $cacheHandlers = [
        'memcache' => new MemcachedHandler($this->container['memcache']),
        'memory'   => new MemoryHandler(),
    ];
    $globalOptions = [
        'type' => 'standard',
    ];
    $tagOptions = [
        'universe' => ['type' => 'constant', 'version' => 5],
    ];
    $ring = new KeyRing($globalOptions, $tagOptions, 'memcache', $cacheHandlers);

    /* define your keys */
    $ring->defineKey("Users", ['universe', ['tag' => 'planet', 'cache_handler' => 'memory', 'version' => null, 'type' => 'standard'], 'city']);


    //==============================================
    // Need to check for some cached data? Generating your key now takes one line instead of 5;
    //===============================================
    $userKey = $ring->getUsersKeyObj('MilkyWay', 'Earth', 'Chicago')->getKeyStr();
    $users = $memcache->get($userKey);
    if (!$users) {
        $users = query("select * from users where universe='MilkyWay' AND planet='Earth' AND city='Chicago'");
        $memcache->set($userKey, $users);
    }

    /* Invalidate them */
    $universeTag = new StandardTag('universe', 'MilkyWay');
    $universeTag->increment();


    //===============================
    // Manual (no KeyRing) equivalent
    //===============================
    $universeTag = new ConstantTag("universe", "MilkyWay", 5);
    $worldTag = new StandardTag("planet", "Earth");
    $cityTag = new StandardTag("city", "Chicago", null, new MemoryHandler());
    $key = new StandardKey("Users", [$universeTag, $worldTag, $cityTag]);
    $userKey = $key->getKeyStr();
    $users = $memcache->get($userKey);
    if (!$users) {
        $users = query("select * from users where universe='MilkyWay' AND planet='Earth' AND city='Chicago'");
        $memcache->set($userKey, $users);
    }

    /* Invalidate them */
    $universeTag->increment();

use NoizuLabs\FragmentedKeys\KeyInterface;
use NoizuLabs\FragmentedKeys\KeyRing;

class MyGames extends KeyRing
{
    public function getGameDescriptionKeyObj(string $gameId): KeyInterface
    {
         /* Define Key in the usual manner  */

         /* . . . */

         $gameSiteId = $this->pimpleContainer['gameSite']; 
         $userId = $this->getUserId(); 
         return $this->getKeyObj("GameDescription", [$gameId, $gameSiteId, $userId]);
    }
}

// Now your cache code looks simple
$gameDescCacheKey = $ring->getGameDescriptionKeyObj($gameId)->getKeyStr();