Powrót do kategorii
Backend
tagi
cache, optymalizacja, redis, zend framework,

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

Avatar
GOGO.Developer, 28/04/2016
redis w zf2

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).

Podobne artykuły

Redis 3 – wykorzystanie struktur danych

Początki z Redis 3 – Struktury danych

Hashowanie plików CSS / JS w Grunt.js

Jak przejąć kontrolę nad pamięcią podręczną przeglądarki.

Poznajmy się
Poznajmy się
Chcesz porozmawiać o start-upach, projektach lub programowaniu?

GOGOmedia Sp. z o.o.
ul. Klimczaka 1
02-797 Warszawa

+48 22 378 47 27
GOGOmedia
GOGOmedia
Internet Software House

Jesteśmy internetową firmą technologiczną, dostarczamy kompletne rozwiązania informatyczne z zakresu web aplikacji. Kompleksowo obsługujemy klientów z różnych sektorów biznesu w zakresie dedykowanego oprogramowania. Prowadzimy szkolenia, doradzamy, wykonujemy specjalistyczne audyty i dzielimy się zdobytą przez lata wiedzą. Dla wielu jesteśmy partnerem, który pomaga osiągać wyznaczone cele biznesowe w najbardziej optymalny sposób.

Polecamy
Polecamy
narzędzia wspierające naszą codzienną pracę
  • New Relic
  • CloudFlare
  • JIRA
  • Bamboo
  • Axure
  • Zendesk
  • Microsoft Project