Redise kasutamine

Redis

Redis aitab veebilehte kiiremaks muuta läbi selle, et enim kasutatud andmebaasi päringute tulemused talletatakse vahemällu.

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

Populaarsemad sisuhaldussüsteemid on arendatud selliselt, et osa andmeid salvestatakse teatud perioodiks vahemällu (cache), kust neid järgmistel kordadel otse päritakse, ilma et peaks neid algsest allikast igal lehe laadimiskorral uuesti kokku panema. Tavaliselt salvestatakse andmed kas kettale mingisse faili või andmebaasi, samas tehakse ka siis ikkagi päringuid andmebaasi vastu või siis loetakse ja kirjutatakse andmeid failisüsteemis – mõlemad on Memcachediga ja Redisega võrreldes ajakulukamad. Redis ja Memcached täidavad sama eesmärki, kuid Redis on uuem ja rohkemate võimalustega. Kui kasutataval 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. Samas tuleb teada, et Redis on mõeldud eelkõige just ajutiste andmete salvestamiseks. Operatiivmälus hoitakse andmeid vaid teatud aja jooksul. Näiteks kui operatiivmälu hakkab otsa saama ja vaja on salvestada uusi andmeid, 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 ei ole see sobiv püsivalt andmete jäädvustamiseks, küll aga sobib vahemäluks. Kui Redisest soovitud andmeid ei leita, siis laetakse need tavapäraste päringutega (samal viisil, nagu Redis poleks kasutusel).

Kas mul on seda vaja?

Nagu eelnevalt välja tõime, on Redise kasutamine vajalik eelkõige veebilehtedel, millel on suur külastatavus ja kus loetakse palju andmeid andmebaasist, nagu 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).

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

Kuidas seda kasutama hakata?

Redise kasutuselevõtmiseks 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. Aktiveerimiseks sisene iseteenindusse, vali töölaualt domeen ning valik "Andmebaasid". Nüüd vali "Redis" ning vajuta nupule "Aktiveeri" (vajalik “Pluss” pakett).

Teiseks on vaja veebileht seadistada Redist kasutama, mida saab teha Sinu veebiarendaja. Kui Sul ei ole oma isiklikku veebiarendajat kuskilt võtta, siis võid abi paluda ka mõnelt meie soovitatud partnerilt, kes on välja toodud meie partnerite lehel.

Veebilehel Redise toe seadistamine sõltub kasutusel olevast sisuhaldussüsteemist.

Käime läbi tuntumad sisuhaldussüsteemid ja vaatame, kuidas Redist kasutama hakata.

WordPress

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

Proovisime Redise toe lisamiseks pluginat https://wordpress.org/plugins/redis-cache/. Pärast plugina paigaldamist tuleb see 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.domeen.ee asemele kirjuta domeeninimi

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. 

Pärast mooduli allalaadimist paki see lahti ja paiguta kataloog “redis” serveris oma lehe sites/all/modules/ kataloogi. Seejärel ava drupali administreerimisliides ning sealt leht Modules. Kui tegid kõik õigesti, siis 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 seadistamiseks, neid ei hakka me siin täpsemalt lahkama, mida üks või teine võimalus teeb ja milline oleks kõige parem seadistusviis. See sõltub Sinu lehekülje eripäradest, mistõttu jätame selle Sinu 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 versiooni sisse ehitatud.

Joomla administreerimisliideses saab selle aktiveerida valikust System -> Global Configuration -> System.

Cache Handleriks tuleb valida Redis ja Redis Server Hostina kasutada 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 teeb Magento enda sisemine vahemälu päris head tööd.

Magento sessioonide infot saab seadistada salvestama kas failisüsteemi, andmebaasi, Memcachedi või Redisesse. Sessioon on kasutajapõhine info, mida serveri poolel salvestatakse. Siia alla kuuluvad näiteks ostukorvi lisatud tooted, mis lehte uuesti külastades endiselt ostukorvis alles on. Mida suurem on lehe külastajate hulk, seda suuremat rolli hakkab mängima see, kuidas sessioone salvestatakse. Kuna failisüsteem ja andmebaas on nii-öelda aeglased vahemälud, siis tasub nende asemel kaaluda 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'

    )

),

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 massiivi 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 on vaja 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 funktsioon ehk 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 igal lehe laadimisel 58 andmebaasi vastu tehtud päringut.

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

Kuna see moodul eeldab, et Redist kasutatakse TCP pordi kaudu ja me võimaldame Redist kasutada vaid UNIX socketi kaudu, siis tuleb seadistustes salvestada UNIX socketi teekond ning pordiks määrata 0. Paraku moodul selle tegemist ei võimalda. 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');

mille asemele tuleks panna:

Configuration::updateValue('PREDIS_SERVER', '/www/apache/domains/www.domeen.ee/tmp/redis.sock');

Configuration::updateValue('PREDIS_PORT', '0');

Juhime tähelepanu, et mooduli enda koodi muutes võib tekkida olukord, kus hilisema mooduli uuendamise käigus tehtud muudatused üle kirjutatakse ja Redise kasutamine võib minna katki – kuniks kood taas vajadustele vastavaks on kohandatud.

Pärast muudatuste sisseviimist 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 tuleb avada leht Advanced Parameters -> Performance. Lehe lõpus on Caching sektsioon, kus tuleb valida Use Cache – Yes ning CacheRedis.

Pärast neid seadistusi 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 phpredise GitHubi lehel.

Väike koodinäide, kuidas andmed esimesel lehe laadimisel Redisesse lisada ja järgmisel lehe avamisel neid sealt lugeda, 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 saada, kas Redis loeb ja salvestab andmeid või mitte, on SSH keskkonnas kasutatav redis-cli programm. 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 kuvab 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?

Ära jäta head võimalust kasutamata! Võta ühendust meie klienditoega abi@veebimajutus.ee ning palu ka enda või oma kliendi lehele Redise võimalust. Kui Sul tekkis küsimusi, siis anna ka sellest meile teada. Veebirebane vastab hea meelega!

Vaata ka Memcached kasutamine

 

 

Seotud juhendid

Sinu tagasiside on oluline

Enim esitatud küsimused

Enim loetud juhendid

Juhendid alustajale

Klienditeenindus
Lisasime diili sinu ostukorvi, said ikka mega hea diili!

Vali paketi periood

1 kuu põhine arveldus

Kuus 12.08

Kokku 12.08

3 kuu põhine arveldus

Kuus 12.08

Kokku 36.24

6 kuu põhine arveldus

Kuus 12.08

Kokku 72.48

1 aasta põhine arveldus

Säästad 20% ehk -24.16

Kuus 10.07

Kokku 120.80

1 aasta
0.00
2 aastat
0.00
3 aastat
0.00
4 aastat
0.00
5 aastat
0.00
6 aastat
0.00
7 aastat
0.00
8 aastat
0.00
9 aastat
0.00
10 aastat
0.00