Autor | Zpráva | ||
---|---|---|---|
MMoka Profil * |
#1 · Zasláno: 21. 4. 2023, 15:30:08
Mám poměrně složitější výcuc dat z mySQL za celý rok do tabulky a ráda bych využila zpracované data dát do cache s tím, že by se cachce aktualizovala řekněme po 6 hodinách. Dá se to v PHP 7 nějak elegantně řešit? Hrozně moc děkuji.
|
||
RastyAmateur Profil |
MMoka:
Jediné, co v PHP asi jen tak neuděláš, je to "řekněme po 6 hodinách". To se obvykle dělá cronem, který musíš někde nastavit - někde na tom serveru, kde web běží. Jednoduché řešení by spočívalo vlastně v tom, že si nastavíš cron, aby ti každých 6 hodin spustil nějaký script, který by napočítal to, co potřebuješ, a uložil to do nějakého souboru (místo souboru by šlo použít i něco komplexnějšího, ale držme se při zemi). Tvoje webovky by pak braly ty data čistě z tohoto souboru. Druhá, taková low-cost varianta v případě, že nemáš server ale jen nějaký webhosting, by byla se při každém requestu podívat do té cache a ověřit, kdy ta cache byla napočítaná. Pokud je stále aktuální, jednoduše vrátíš tato data z cache. Pokud už jsou tato data více než 6 hodin staré, holt se napočítají za běhu, uloží se a až pak se pošlou uživateli. Nevýhoda samosebou je, že každých 6 hodin bude jeden uživatel čekat na data mnohem déle. Nic lepšího mě osobně nenapadá. |
||
Firibix Profil |
#3 · Zasláno: 21. 4. 2023, 23:20:27
Reakce na RastyAmateura:
„každých 6 hodin bude jeden uživatel čekat na data mnohem déle“ Doplním zajímavost: U systémů s vysokou zátěží se může projevit problém tzv. cache stampede. Dejme tomu, že výpočet hodnoty trvá 5 vteřin a do systému chodí 1 požadavek za vteřinu. Bez ošetření se tím pádem po expiraci cache spustí pět výpočtů souběžně. V extrémním případě (velký počet požadavků a vysoká výpočetní náročnost) se systém může přetížit tolik, že se žádný z výpočtů nestihne dokončit před vypršením časového limitu, nic se do cache neuloží, a systém úplně spadne. |
||
Časová prodleva: 3 dny
|
|||
N71 Profil * |
#4 · Zasláno: 24. 4. 2023, 14:19:41
MMoka:
Být tebou, tak bych ignoroval obě zmíněné rady, protože jsi pravděpodobně začátečník. A zrovna tvorba a (především) správná validace a invalidace keší je jedna z nejtěžších disciplín praktického programování vůbec. Svěř se do péče nějakého frameworku. (Nebo jen jeho kešovacím částem). Například Nette: Caching, Symfony: Cache component, Laravel: Cache. |
||
Časová prodleva: 1 rok
|
0