Autor Zpráva
MMoka
Profil *
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
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.
N71
Profil *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0