Sfat creare cache dintr-un API call

Va satut!

Am o nelamurire cum sa tratez o problema legata de cache:

Lucrez la proiect in laravel unde am un model de hoteluri si un api extern de unde pot primi tarifele pe unitate in baza unui request cu perioada, camere si componentii pe camere.

Problema este in frontend, cand accesez pagina de statiune, imi face request la api de fiecare data cand folosesc paginatia sau filre de facilitati, etc.

M-am gandit ca la prima accesare a statiunii, eu deja am toate hotelurile din model si as putea sa fac un singur request la APi si sa incerc sa salvez in db pretul pentru fiecare hotel pentru perioada respectiva.

Nu stiu daca asta e cea mai buna abordare si poate gasesc putin ajutor aici.

Multumesc

E OK. Vezi să expiri cache-ul ăla după cîteva ore.

Pai si daca pretul se schimba pana expira cache-ul tau? Vei lucra un timp cu niste preturi care nu sunt reale iar asta poate genera o mare problema.

Salutare!
Eu as face putin diferit, adica 2 procese separate.

  • as face un serviciu separat care sa-mi proceseze api request-uri, la intervale mici de timpi si sa-mi alimenteze db-ul cu pricina
  • partea de front sa nu foloseasca api-ul respectiv, ci doar sa citeasca valorile locale din db.

O astfel de procedura o folosim in cazul procesarii de feed-uri.
Mult Succes!

2 Likes

@geosoft1 are dreptate, este posibil ca preturile sa se schimbe in valabilitatea cache-ului . sa zicem ca aici merg pe o solutie de mijloc: in pagina de statiune ii afisez doar cel mic pret (pe care vreau sa il si cache-uiesc) si apoi cand intra pe unitate ii fac un call la api si ii afisez toate ofertele disponibile si cu preturile in timp real.

@Opencart_Romania m-am gandit la solutia asta insa serviciul ala dedicat pentru api ar trebui sa imi ia fiecare combinatie de check_in, check_out, nr camere, adulti, copii si varste copii pe fiecare unitate din fiecare statiune. ceea ce cred ca e cam overkill…

Subscriu la solutia propusa de @Opencart_Romania cu observatia ca as sari peste baza de date. Un serviciu care trage datele periodic le poate tine chiar in memory (ma gandesc eventual la o structura de tip map) si le poate expune printr-un endpoint. Din front end faci un request direct catre acel endpoint.

@Prodix Salutare!
Nu am idee ce cantitate de date procesezi, insa nu este sanatos sa faci request on click catre api.
Cauta o solutie sa pre-procesezi datele, le tii in fisiere in db, etc… no matter.
Incearca sa iti faci scenarii de accesare a api-ului si atunci load-ul va fi si mai mic.
Daca response-ul este imens si doresti sa mergi pe update, atunci recomandarea mea este sa o faci cu LOAD DATA INFILE pe mysql cu script in bash + cron.
Succes!

daca aplicatie permite… se poate afisa langa pret un text de forma “actualizat acum x minute”.
daca x e intr-o limita decenta… nu vad o problema in utilizare.
actualizarea fortata se poate lega cu un trigger de user (daca vrea / e dispus sa astepte pretul curent).
evident, pentru orice rezervare sau actiune din asta angajanta se face update de pret.

1 Like