Redis pomocou PREDIS (Composer)
Pridanie knižnice predis
Pre tento návod je potrebné, aby ste už mali nainštalovaný composer a vytvorený composer projekt. Následne do projektu pridáme knižnicu predis/predis.
composer require predis/predis
Práca s redis cache
Pripojenie pomocou predis knižnice funguje trochu inak ako pomocou PHPRedis. V prvom rade treba načítať composer súbor autoload.php.
require 'vendor/autoload.php';
Následne povolíme knižnicu predis v súbore.
Predis\Autoloader::register();
A až potom sa môžeme pripojiť k redis serveru, v našom prípade k redis socketu. Na to použijeme funkciu Client(). Táto funkcia vyžaduje jeden parameter.
- Adresa na pripojenie k redisu. V našom prípade používame socket, preto ho definujeme slovom unix. Ak by sme používali IP adresu, nebolo by tam unix, ale tcp alebo tls.
$redis = new Predis\Client('unix:/dev/shm/sock-redis-p2000');
Defaultne zapisuje údaje do databázy číslo 0. Ak si chcete zmeniť databázu na zapisovanie, môžete tak spraviť funkciou select().
Štandardne máte k dispozícií 16 databáz (od 0 po 15).
$redis->select(1);
Pre demonštráciu budeme používať premennú number ktorá sa bude zväčšovať s každým načítaním stránky.
Najskôr si ju teda na stránke vypíšeme, aby sme vedeli jej aktuálnu hodnotu. Prvý krát samozrejme nebude premenná vytvorená, takže nastavíme aby sa nám vypísala nula.
$hodnota = $redis->get('number') ?: 0;
Premenná hodnota teda obsahuje aktuálne číslo ktoré je zapísané v redise. Vypíšeme si ju na stránku.
echo "Aktuálna hodnota: " . $hodnota;
Posledné čo nám chýba je zapísanie novej hodnoty do redis databázy. To spravíme funkciou set()s dvoma parametrami.
- Prvý je názov premennej,
- druhý je hodnota, ktorá sa má zapísať.
Spravíme to tak, že pripočítame k aktuálnej hodnote 1 a tak ju zapíšeme. Tiež pre testovacie účely nastavíme exspiračný čas na 60 sekúnd. Na to slúži funkcia expire().
$redis->set('number', $hodnota + 1);
$redis->expire('number', 360);
Celý script teda bude vyzerať takto:
<?php
require 'vendor/autoload.php';
Predis\Autoloader::register();
$redis = new Predis\Client('unix:/dev/shm/sock-redis-p2000');
$redis->select(1);
$hodnota = $redis->get('number') ?: 0;
echo "Aktuálna hodnota: " . $hodnota;
$redis->set('number', $hodnota + 1);
$redis->expire("number", 360);