Jei forume lankaisi pirmą kartą, kviečiame registruotis ir prisijungti prie diskusijų.
PrisijungtiRegistruotisJei forume lankaisi pirmą kartą, kviečiame registruotis ir prisijungti prie diskusijų.
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.
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
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
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:
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.
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ą.