Image for Wykorzystanie Redis 3 jako systemu cache’ującego w Zend Framework 2

Wykorzystanie Redis 3 jako systemu cache’ującego w Zend Framework 2

Czas czytania:

Po zainstalowaniu środowiska Redis 3 na serwerze oraz biblioteki PHP do jego obsługi możemy przystąpić do wdrożenia Redis’a jako systemu cachującego.

Na samym początku tworzymy plik konfiguracyjny np redis.global.php w którym zapiszemy dane dostępowe do bazy Redis.

<?php
return array(
    'redis' => array(
        'host' => '127.0.0.1',
        'port' => '6379',
        'timeout' => 30
    )
);
?>

Plik ten umieszczamy w katalogu config/autoload/

Następnym krokiem jest utworzenie serwisu do obsługi Redisa.

W tym celu tworzymy klasę RedisFactory implementującą interfejs FactoryInterface oraz umieszczamy ją w odpowiedniej przestrzeni.

<?php
namespace Application\Service\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\Cache\Storage\Adapter\Redis;
use Zend\Cache\Storage\Adapter\RedisOptions;

class RedisFactory implements FactoryInterface {
    public function createService(ServiceLocatorInterface $serviceLocator) {
        $cfg = $serviceLocator->get('Config');
        $options = new RedisOptions();
        $options->setServer (array(
            'host' => $cfg['redis']['host'],
            'port' => $cfg['redis']['port'],
            'timeout' => $cfg['redis']['timeout']
        ) );

        $options->setLibOptions ( array (

            \Redis::OPT_SERIALIZER => \Redis::SERIALIZER_PHP

        ) );

        $obj = new Redis($redisOptions);

        return $obj;

    }
}

Tak przygotowany usługę możemy następnie wykorzystać w naszej aplikacji.

Aby usługa była dostępna należy dać do niej dostęp poprzez service manager. Dokładamy więc w module.config.php poniższy kod

<?php

...

'service_manager' => array(
'factories' => array(

'Application\Cache\Redis' => 'Application\Service\Factory\RedisFactory',

),

...

?>

dzięki któremu będziemy mieli dostęp do usługi w naszej aplikacji.

Kolejnym krokiem jest już konkretne zastosowanie cache’owania w naszej aplikacji.

W dowolnym kontrolerze możemy skorzystać z zarejestrowanej usługi.

<?php

....

public function someAction() {

...

    $redis = $this->getServiceLocator()->get('Application\Cache\Redis');
    //klucz po którym będziemy odpytywać bazę o dane

$key = 'for-example-slug-from-url';
$result = false;

if ($redis->hasItem ($key)) {

        //jeśli znalazł dane to zwrócenie ich

$result =  $redis->getItem($key);

} else {

$result = array();

        ...

        //przygotowanie i pobranie danych do zmiennej $result

        ...

        //zapisanie wyniku

$redis->setItem($key, $result);

}

...

    //dalsza część akcji z pobranymi danymi

}

...

W taki oto prosty sposób możemy wyposażyć naszą aplikacje w ciekawy i bardzo wydajny system cache’owania (zamiast powszechnie stosowanego memcache’a).

Zainteresował Cię ten artykuł?

Oferujemy profesjonalne wsparcie programistów w technologii Web.
Może Cię również zainteresować:
5 rzeczy, na które warto zwrócić uwagę, wybierając dedykowany system klasy ERP, WMS lub LMS

Tworzenie dedykowanych aplikacji web’owych (dostępnych przez przeglądarkę WWW z poziomu komputera, tabletu czy telefonu) jest… Read More

Clutch Recognizes GOGOmedia as a 2022 Development Leader in Poland

GOGOmedia is a multidisciplinary team with vast experience in the digital technology space. We deliver… Read More