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ł?
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
Warsztaty Discovery – 5 powodów dla których warto je przeprowadzić
Post pochodzi bezpośrednio z naszych oficjalnych kanałów na Social Media. W dynamicznym… Read More
Optymalizacja eCommerce vs. Zewnętrzny Dyrektor Technologiczny
🛠️ Studium przypadku 🛠️Post pochodzi bezpośrednio z naszych oficjalnych kanałów na Social… Read More