Naujausias pranešimas: Samba kritinis pažeidžiamumas
frame

Sveiki apsilankę!

Jei forume lankaisi pirmą kartą, kviečiame registruotis ir prisijungti prie diskusijų.

Prisijungti Registruotis

MySQL duomenų kešavimas Ubuntu 20.04 serveryje naudojant Redis ir PHP

iv_vytenisgiv_vytenisg Super Moderator
edited 2021 gegužės 24 Į Duomenų bazių serveriai

Redis (Remote Dictionary Server) yra atvirojo kodo duomenų bazė, kuri naudoja papildomą atmintį ir rakto reikšmes greitesniam duomenų pateikimui. Redis yra idealus pasirinkimas, jeigu turite poreikį į greitį orientuotai sistemai. Kadangi duomenys laikomi RAM atmintyje, tai sumažina laiką, reikalingą pasiekti duomenis diske. Redis palaiko tokius duomenų tipus, kaip string'us, hash'us, sąrašus, set'us ir pan.

Šioje pamokoje pateiksime instrukciją, kaip naudoti duomenų kešavimą Ubuntu 20.04 serveryje pasitelkiant Redis serverį su PHP.

0. Preliminarūs reikalavimai:

  • Mūsų parengtas Ubuntu 20.04 serveris
  • Naudotojas turintis sudo teises
  • LAMP tarnybų paketas

1. Redis serverio diegimas ir minimalus konfigūravimas

Prieš pradedant diegimą atnaujinkite serverio paketus ir įdiekite Redis:

sudo apt update
sudo apt install redis-server

Toliau atsidarykite Redis konfigūracijos failą su norimu teksto redaktoriumi (mes naudojame nano):

sudo nano /etc/redis/redis.conf

Šiame faile susiraskite eilutę su supervised ir reikšmę no pakeiskite į systemd. Šis pakeitimas leis Redis serverį administruoti kaip tarnybą suteikiant daugiau galimybių lengvai administruoti atliekamas operacijas:

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Atlikus koregavimus išsaugokite juos ir perkraukite Redis tam, kad pakeitimai įsigaliotų:

sudo systemctl restart redis.service

Ir patikrinkite ar Redis veikia sėkmingai:

sudo systemctl status redis


2. Redis papildinio diegimas

Kešavimo veikimui reikalingas php-redis paketas, kuris įdiegiamas paleidus šią komandą:

sudo apt install -y php-redis

Užbaigus diegimą perkraukite Apache:

sudo systemctl restart apache2


3. Duomenų bazės kūrimas

Prisijunkite prie duomenų bazių serverio:

sudo mysql -u root -p

ir įveskite savo prisijungimo slaptažodį. Tada sukuriame naują duomenų bazę:

CREATE DATABASE imones_db;

Duomenų bazei sukuriame naudotoją ir suteikiame jam visas teises valdyti ją:

CREATE USER 'naudotojas'@'localhost' IDENTIFIED BY 'StiprusSlaptazodis';
GRANT ALL PRIVILEGES ON imones_db.* TO 'naudotojas'@'localhost';
FLUSH PRIVILEGES;

Tada pasirinkite savo duomenų bazę:

USE imones_db;

Sukurkite darbuotojai lentelę. Ši lentelė bus naudojama laikyti standartiniams darbuotojų duomenims, kaip ID, vardas ir pavardė:

CREATE TABLE darbuotojai (darbuotojo_id INT AUTO_INCREMENT PRIMARY KEY, vardas VARCHAR(50), pavarde VARCHAR(50) );

Įveskite kelių galimų darbuotojų duomenis. Nenaudokite darbuotojo_id duomens, nes jis aprašytas kaip AUTO_INCREMENT reikšmė:

INSERT INTO darbuotojai (vardas, pavarde) VALUES ('PETRAS', 'PETRAITIS');
INSERT INTO darbuotojai (vardas, pavarde) VALUES ('JONAS', 'JONAITIS');
INSERT INTO darbuotojai (vardas, pavarde) VALUES ('VARDAS', 'PAVARDE');
INSERT INTO darbuotojai (vardas, pavarde) VALUES ('VARDENIS', 'PAVARDENIS');

Paleiskite darbuotojai užklausą, kuri turi pateikti įvestus duomenis:

SELECT darbuotojo_id, vardas, pavarde from darbuotojai;

Ir sutikrinkite ar visi įvesti darbuotojai yra matomi lentelėje:


4. PHP skripto sukūrimas

Sukuriame PHP skriptą svetainės root direktorijoje. Failas jungsis prie duomenų bazės ir tikrins darbuotojai lentelę. Sukurkite naują failą:

sudo nano /var/www/html/darbuotojai.php

ir įkelkite PHP skriptą. Svarbu, kad sutikrintumėte visus kintamiuosius, kurie skirsis jūsų kuriamoje duomenų bazėje. Skriptą rasite atskirame faile darbuotojai.php, kuris prisegtas žemiau po įrašu.

Paaiškiname kelias esmines skripto dalis:

$redis = new Redis(); 
$redis->connect('127.0.0.1', 6379);

Šios dvi eilutės prijungia Redis serverį ir inicijuoja $redis kintamąjį skripte pateikiant užklausą į Redis serverį.

$sql = 'select
    darbuotojo_id,
    vardas,
    pavarde                                 
    from darbuotojai
    ';
$cache_key = md5($sql);

Kintamasis $sql atlieka SQL komandą, kuri pasiima įrašus iš duomenų bazės. Redis serveris naudoja $cache_key kintamąjį saugoti duomenis susietus su raktu. Šis skriptas naudoja md5 šifravimo algoritmą SQL komandoje tam, kad būtų sutrumpinamas raktas ir galimos problemos paeiškos būtų lengvesnės.

if ($redis->exists($cache_key)) {
$data_source = "Data from Redis Server";
$data = unserialize($redis->get($cache_key));
...

} else { 

 $data_source = 'Data from MySQL Database'; 

...     

 $redis->set($cache_key, serialize($data)); 
 $redis->expire($cache_key, 10);        

}

Aukščiau pateiktas kodas tikrina, ar Redis serveryje yra raktas $cache_key. Jei raktas yra, skriptas iš naujo nebetikrina duomenų ir papildomai nebeįrašo duomenų į $data kintamąjį. Jei Redis serveryje nėra $cache_key rakto, kodas nuskaito duomenis iš MySQL duomenų bazės iš naujo ir talpina juos naudodamas komandą $redis-> set.

Komanda $redis-> expire nustato galiojimo laiką sekundėmis, kurį raktas išlaiko atmintyje prieš jį ištrinant. Duomenų galiojimo laikas yra 10 sekundžių. Galite pakeisti šią vertę, kad atitiktų jūsų poreikius.


5. Redis kešavimo patikrinimas

Apsilankykite adresu:

http://jūsų_ip_adresas/darbuotojai.php

ir matysite duomenis, kurie bus užkraunami iš duomenų bazės:

Perkraukite puslapį ir jums bus pateikti kešuoti PHP duomenys iš Redis serverio:

Ankstesnė išvestis patvirtina, kad PHP skriptas veikia taip, kaip tikėtasi, ir duomenys teikiami iš greitos atminties talpyklos Redis serveryje. Tai sumažina duomenų nuskaitymo iš disko paieškos laiką. Taip pat galite pabandyti atnaujinti puslapį po 10 sekundžių, kad būtų panaikinamas kešavimas.

Pasitelkiant šį kešavimo būdą galite pagreitinti tam tikrų svetainės dalių ar aplikacijų užkrovimą ir pagerinti svetainės greitaveiką.

Pažymėtos temos:
Norėdami palikti komentarą, turite prisijungti arba registruokis.
Dedikuoti.lt
Šiame forume rasite informaciją kaip atlikti serverio administravimą, konfigūravimą, įvairių tarnybų bei papildomų aplikacijų diegimą. Taip pat pateiksime rekomendacijų, skirtų serverių saugumui, monitoringui ir optimizavimui. Kviečiame prisijungti prie dedikuotų serverių administratorių bendruomenės, dalyvauti diskusijose ir praplėsti savo žinias serverių administravimo srityje!
© 2007 - 2023 Dedikuoti.lt forumas, visos teisės saugumos.