Redise kasutamine

Redis

Redis aitab veebilehte kiiremaks muuta läbi selle, et enimkasutatud andmebaasipäringute tulemused talletatakse vahemällu.

Juhul kui veebilehe või e-poe toimimine sõltub suurel määral andmebaasipäringutest, siis suurema lehe külastajate hulga juures võib nende päringute tegemine muutuda andmebaasiserverile niivõrd koormavaks, et päringutele tagastatava vastuse aeg venib pikale. See tähendab omakorda seda, et veebilahenduse laadimisaeg on pikk ja klientidele avaneb leht aeglaselt.

Populaarsemad sisuhaldussüsteemid on arendatud sedasi, et mingid andmed salvestatakse teatud perioodiks vahemällu (cache), kust neid järgmistel kordadel otse päritakse, ilma et peaks algsest allikast neid andmeid igal lehe laadimisel uuesti kokku panema. Tavaliselt salvestatakse neid andmeid kas kettale mingisse faili või andmebaasi, kuid sellisel viisil tehakse ikkagi kas päringuid andmebaasi vastu või loetakse ja kirjutatakse andmeid failisüsteemis - mõlemad on Memcachediga ja Redisega võrreldes ajakulukamad toimingud. Redis ja Memcached täidavad sama eesmärki, kuid Redis on uuem ja rohkemate võimalustega. Kui kasutuses oleval tarkvaral ei ole Redise tuge, siis võib-olla toetab see just Memcachedi.

Redise puhul salvestatakse sellised andmed otse serveri operatiivmällu (RAM), kuhu andmete kirjutamine ja kust andmete lugemine on märkimisväärselt kiirem. Siinkohal tasub meeles pidada, et Redis on just ajutiste andmete salvestamiseks, sest operatiivmälus hoitakse neid vaid mingi aja jooksul. Näiteks kui operatiivmälu hakkab otsa saama ja uued andmed vajavad salvestamist, siis hakatakse eelnevalt operatiivmällu paigutatud andmeid hülgama, et uutele ruumi teha. Kui Redise serverile taaskäivitamine teha, siis lähevad kõik sinna salvestatud andmed kaduma. Seetõttu pole see sobiv püsivalt andmete jäädvustamiseks, kuid igati sobiv vahemäluks. Juhul kui Redisest soovitud andmeid ei leita, laetakse need tavapäraste päringutega (samal viisil nagu Redis poleks kasutusel).


Kas mul on seda vaja?

Nagu eelnevalt mainitud, siis Redise kasutamine muutub eelkõige oluliseks veebilehtedel, millel on suur külastatavus ja kus loetakse palju andmeid andmebaasist, näiteks uudisteportaalid või populaarsed e-poed. Tavalise ettevõtte kodulehe puhul, mida külastatakse mõnisada korda päevas, ei pruugi isegi laadimiskiiruse osas vahet tähele panna ja enamike lehtede jaoks piisab staatilise vahemälu genereerimisest (uuri selle kohta oma veebiarendajalt).

Redis on üldiselt kasutusel vaid kallimatel pilve- või privaatserveritel, kus kogu tarkvara on võimalik oma käe järgi ise seadistada. Veebimajutuses on võimalik Redist kasutada Pluss paketiga.


Kuidas seda kasutama hakata?

Selle jaoks, et Redist kasutama hakata, on vaja serveri poolel jooksutada Redise deemonit (programmi, mis teostab teatud ettemääratud operatsioone kindlate ajavahemike tagant või vastuseks mingitele sündmustele) ja Redise laiendust PHP jaoks. Selle osa eest kannavad hoolt Veebimajutuse rebased - anna meile ainult teada, et soovid oma lehele Redise toe lisada ja me aktiveerime selle (vajalik “Pluss” pakett).

Teiseks on vaja veebileht seadistada Redist kasutama, mille jaoks on vaja veebiarendaja panust. Juhul kui teil puudub oma veebiarendaja, siis võite abi paluda ka mõnelt Veebimajutuse partnerilt, kes on meil välja toodud filtreeritavate märksõnadega tööriistas.

Veebilehel Redise toe seadistamise protseduur sõltub kasutuses olevast sisuhaldussüsteemist.

Vaatame siinkohal põgusalt enamlevinud sisuhaldussüsteeme ja kuidas nendel selle võimaluse kasutusele saaks võtta.


WordPress

Vaikimisi paigaldatud WordPress 4.6.1 koos twentysixteen teemaga tegi avalehel andmebaasi vastu 24 päringut.

Proovisime Redise toe lisamiseks pluginat https://wordpress.org/plugins/redis-cache/ . Peale paigaldamist tuleb plugin aktiveerida ja lisada mõningad read WordPressi wp-config.php faili, näiteks peale define('DB_COLLATE', ''); rida:

define('WP_CACHE', true);
define('WP_REDIS_SCHEME', 'unix');
define('WP_REDIS_PATH', '/www/apache/domains/www.domeen.ee/tmp/redis.sock');
define('WP_REDIS_CLIENT', 'pecl');
/www/apache/domains/www.domeen.ee/tmp/redis.sock tuleks asendada teile veebirebase poolt edastatud teekonnaga.
Peale Redise seadistamist tehakse avalehel 5 andmebaasipäringut.



Drupal

Drupalil on Redise võimaluse aktiveerimiseks loodud eraldi moodul, mille saab alla laadida lehelt https://www.drupal.org/project/redis. Paigaldasime moodulist versiooni 7.x-3.12. Paki alla laetud moodul lahti ja paiguta kataloog “redis” serveris oma lehe sites/all/modules/ kataloogi sisse. Seejärel ava drupali administreerimisliides ning sealt leht Modules. Kui kõik läks õigesti, peaksid jõudluse kategooria all nägema uut võimalust – Redis.



sites/all/modules/redis/README.txt fail sisaldab täpseid samme ja võimalusi Redise sedistamiseks, seega me ei hakka täpselt lahkama, mida iga võimalus teeb ja mis oleks kõige parem seadistusviis. See sõltub leheküljest ja jätame selle teie lehe arendaja hooleks välja uurida, kuid sisuliselt tuleb muuta sites/default/settings.php faili ja lisada sinna Redise sätted, näiteks:

// lubame Redisega cachemise toe

$conf['redis_client_interface'] = 'PhpRedis';
$conf['redis_client_socket'] = '/www/apache/domains/www.domeen.ee/tmp/redis.sock';
$conf['lock_inc']               = 'sites/all/modules/redis/redis.lock.inc';
$conf['path_inc']               = 'sites/all/modules/redis/redis.path.inc';
$conf['cache_backends'][]       = 'sites/all/modules/redis/redis.autoload.inc';
$conf['cache_default_class']    = 'Redis_Cache';
$conf['cache_class_cache']           = 'Redis_Cache';
$conf['cache_class_cache_menu']      = 'Redis_Cache';
$conf['cache_class_cache_bootstrap'] = 'Redis_Cache';
Kui seadistus olemas ja Redise moodul aktiivne, siis hakkab veebileht andmeid muutmällu salvestama ja sealt lugema, mille tagajärjel väheneb andmebaasi vastu tehtav päringute arv.


Testides lehte, tehakse andmebaasi vastu 23 päringut, peale Redise aktiveerimist aga 8.


Joomla

Joomlas on Redise tugi meie poolt testitud 3.5 versioonis sisse ehitatud.

Joomla administreerimisliideses System → Global Configuration → System saab selle aktiveerida.




Cache Handleriks tuleb valida Redis ja Redis Server Hostina kasutada veebirebase poolt edastatud socketi teekonda kujul /www/apache/domains/www.domeen.ee/tmp/redis.sock

Kasutades Debug System seadistust tekitab Joomla iga lehe lõppu statistika, kust on võimalik vaadata, mitu päringut andmebaasi vastu tehti. Meie katsetus Joomla 3.5 värskelt installitud testsisuga teeb avalehel 24 andmebaasipäringut, Redise seadistamise järel enamjaolt 5.



Magento

Testime Redist Magento 2.0.8 näidissisuga muutmata versiooni peal. Avalehe esimesel laadimisel tehakse andmebaasi vastu 669 andmebaasipäringut, järgmisel laadimisel vaid 2. Seega Magento enda sisemine vahemälu teeb päris head tööd.

Magento sessioonide infot saab seadistada failisüsteemi, andmebaasi, Memcachedi või Redisesse salvestama. Sessioon on kasutajapõhine info, mida serveri poolel salvestatakse. Selline info on näiteks ostukorvi lisatud tooted, mis lehte uuesti külastades endiselt ostukorvis alles on. Mida suurem on lehe külastajate hulk, seda suuremat rolli omab sessioonide salvestamise viis. Kuna failisüsteem ja andmebaas on niiöelda aeglased vahemälud, siis tasub kaaluda nende asemel Redist.

Redise kasutamiseks tuleb muuta app/etc/env.php faili ja seadistada seal session osa. See on seal ilmselt kujul:

'session' =>
    array (
    'save' => 'files',
),

ja tuleks asendada sellega:

'session' =>
   array (
   'save' => 'redis',
   'redis' =>
      array (
        'host' => '/www/apache/domains/www.domeen.ee/tmp/redis.sock',
        'port' => '0',
        'password' => '',
        'timeout' => '2.5',
        'persistent_identifier' => '',
        'database' => '0',
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '1',
        'max_concurrency' => '6',
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',
        'min_lifetime' => '60',
        'max_lifetime' => '2592000'
    )
),

/www/apache/domains/www.domeen.ee/tmp/redis.sock tuleks asendada teile veebirebase poolt edastatud teekonnaga.

Veel infot: http://devdocs.magento.com/guides/v2.1/config-guide/redis/redis-session.html


Lisaks sessiooni andmetele saab Redisesse salvestama seadistada ka lehtede väljundit. Selleks tuleb jällegi täiendada massiivi app/etc/env.php failis ja lisada massivi lõppu:

'cache' =>
array(
   'frontend' =>
   array(
      'default' =>
      array(
         'backend' => 'Cm_Cache_Backend_Redis',
         'backend_options' =>
         array(
            'server' => '/www/apache/domains/www.domeen.ee/tmp/redis.sock',
            'port' => '0'
            ),
    ),
    'page_cache' =>
    array(
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
       array(
         'server' => '/www/apache/domains/www.domeen.ee/tmp/redis.sock',
         'port' => '0',
         'database' => '1',
         'compress_data' => '0'
       )
    )
  )
),

Seejärel tuleb tühjendada Magento vahemälu, tühjendades kataloogid var/cache , var/page_cache ja var/session .

Veel infot: http://devdocs.magento.com/guides/v2.1/config-guide/redis/redis-pg-cache.html


Prestashop

Testime Prestashop 1.6.1.4-ja. Prestashopis on olemas profileerimise võimalus ehk siis võimalus sisse lülitada koodi analüüsimine, mille järel lehe lõppu kuvatakse erinevat statistikat koodi poolt tehtud toimingute kohta, sealhulgas andmebaasi vastu tehtud päringute arvu. Selle saab aktiveerida, muutes failis config/defines.inc.php rea:

define('_PS_DEBUG_PROFILING_', false);

selliseks:

define('_PS_DEBUG_PROFILING_', true);

Vaikimisi paigaldatud Prestashopi avalehel logitakse 58 andmebaasi vastu tehtud päringut igal lehe laadimisel.

Prestashopis Redise toe võimaldamiseks tuleb kasutada lisamoodulit. Testisime moodulit https://github.com/firstred/phprediscache

Kuna see moodul eeldab, et Redist kasutatakse TCP pordi kaudu ja me võimaldame Redist kasutada vaid UNIX socketi kaudu, siis tuleks seadistustes salvestada UNIX socketi teekond ning port 0. Paraku moodul selle tegemist ei võimalda ja seetõttu tuleks enne mooduli installimist selle koodis teha muudatus.

Failis modules/phprediscache/phprediscache.php on read:

Configuration::updateValue('PREDIS_SERVER', '127.0.0.1');
Configuration::updateValue('PREDIS_PORT', '6379');
Nende asemele tuleks panna:
Configuration::updateValue('PREDIS_SERVER', '/www/apache/domains/www.domeen.ee/tmp/redis.sock');
Configuration::updateValue('PREDIS_PORT', '0');

/www/apache/domains/www.domeen.ee/tmp/redis.sock tuleks seal asendada teile veebirebase poolt edastatud Redise socketi teekonnaga.

Siinkohal pööran tähelepanu sellele, et mooduli enda koodi muutes võib tekkida olukord, kus hilisema mooduli uuendamise käigus tehtud muudatused üle kirjutatakse ja Redise kasutamine võib katki minna - kuniks koodi jälle vastavalt vajadustele kohandatud on.

Muudatuste sisse viimise järel tuleb avada administreerimisliides ja sealt leht Modules and Services. Otsida üles Redis Cache (PHP Redis Extension) moodul ja see installida.


Installimise käigus salvestatakse andmebaasi koodis muudetud Redise socketi teekond ja port.


Seejärel avada leht Advanced Parameters → Performance. Lehe lõpus on Caching sektsioon, kus tuleb valida Use Cache – Yes ning valida CacheRedis.


Nende seadistuste järel peaks ka Redise mooduli seadistuste leht nüüd kuvama, et Redisega on võimalik ühendust saada.


Peale Redise seadistamist logitakse avalehel andmebaasi vastu tehtavaid päringuid 27.


Ise arendades

Tutvu Redise võimalustega lehel phpredise GitHubi lehel.

Väike koodinäide, kuidas andmed esimesel lehe laadimisel Redisesse lisada ja järgmisel lehe avamisel neid sealt lugeda nii, et neid uuesti laadima ei peaks.

$r = new Redis();

$r->connect("/www/apache/domains/www.domeen.ee/tmp/redis.sock", 0);

if (!$data = $r->get("test")){

        echo "Kogun andmeid, mida Redisesse lisada!<br>";

        $data = "mingidandmed";

        $r->set("test", $data);

} else {

        echo "Leidsin andmed Redisest!<br>";

}

$r->close();

echo $data;


Kontroll

Üks võimalus aru saamaks, kas Redis loeb ja salvestab andmeid või mitte, on SSH keskkonnas kasutatav redis-cli programm. Näiteks ise arendamise näite testimiseks käivita käsklus:

redis-cli -s /www/apache/domains/www.domeen.ee/tmp/redis.sock monitor

Väljund peaks peale esimest skripti avamist veebis kuvama järgnevat:

OK
1474027844.680016 [0 unix:/www/apache/domains/www.domeen.ee/tmp/redis.sock] "GET" "test"
1474027844.680150 [0 unix:/www/apache/domains/www.domeen.ee/tmp/redis.sock] "SET" "test" "mingidandmed"

Ehk proovitakse andmeid Redisest lugeda (GET). Kuna neid sealt ei leita, siis kirjutatakse need sinna (SET).

Järgnevatel lehe laadimistel on andmed juba Redises olema ja redis-cli monitor kuvav vaid GET päringut.

1474027855.221778 [0 unix:/www/apache/domains/www.domeen.ee/tmp/redis.sock] "GET" "test"

Redise statistikat näeb järgnevalt:

redis-cli -s /www/apache/domains/www.domeen.ee/tmp/redis.sock info


Tekkis huvi?

Ärge jätke head võimalust kasutamata ja võtke ühendust meie klienditoega abi@veebimajutus.ee ning paluge ka enda või oma kliendi lehele Redise võimalust. Kui aga tekkis küsimusi, siis palume kindlasti teada anda.


Ei leidnud, mida otsisid? Küsi meilt, me aitame!

Helista numbril 683 5188 või kirjuta abi@veebimajutus.ee

Või saada oma küsimus siin, võtame sinuga ühendust nii pea, kui võimalik.

Vale vastus
Cart