Jak udržet statická data v paměti, aby se jednou natáhla z databáze pro všechny příští requesty?
- Honza.Mottl
- Člen | 104
Mám určitá za běhu statická data (číselníky do radio inputů, data pro autocomplete atd), která mám uložená v databázi pro pořádek a aby si je snadno mohl zákazník upravit. Načítám je v Manageru, při každém requestu se opět načítají z databáze. Nepodařilo se mi udržet načtená data mezi requesty. Jak se to dá udělat? Díky.
- srigi
- Nette Blogger | 558
Na toto sluzi cache. PHP samotne to nedokaze z principu fungovania request-response. Zjednodusene, napr. na Apache serveri sa s kazdym requestom spusti novy proces a po jeho obsluhe sa proces ukonci. Cize medzi requestami si nemozes v pamati udrzat nejake informacie.
Preto sa pouziva DB, alebo file cache. Najblizsie riesenie pre teba je bud Memcached, alebo Redis, kde si informacie ulozis.
Editoval srigi (17. 11. 2016 11:43)
- Honza.Mottl
- Člen | 104
Diky. Pouvazuji o Memcached. Musel bych serializovat Array a ulozit ho do cache.
- newPOPE
- Člen | 648
Este by som ale pouvazoval nad tym ci to naozaj do cache davat chces. Treba
si uvedomit, ze tym ze data das do cache ich dostanes pri dalsomm requeste ale
s tym pridu aj veci ako invalidacia danej cache (napr. po upraveni ciselniku
pouzivatelom). Takze sa treba rozhodnut a zamyslet ci ti to naozaj za to
stoji.
Tym nechcem povedat, ze cache je zla to nie. Len treba vediet kedy ju pouzit aby
si z nej mal uzitok.
- hitzoR
- Člen | 51
Ono až si jednou tu cache vyzkoušíš, tak už nebudeš chtít dělat nic bez ní. Jediný problém je, že do ní nejdou ukládat objekty, které nepodporují serializaci (přesně kvůli tomuhle si musím „serializovat“ entity z Nextras\ORM ručně :D). Pak je už jen na tobě, aby jsi nezapomněl cache zinvalidovat, když něco změníš.
- mkoubik
- Člen | 728
Na většinu věcí to je overkill a stačí nějaká externí cache, Pokud
bys ale opravdu chtěl držet data v paměti mezi requesty, tak koukni na http://reactphp.org/.
Každé obsloužení requestu je pak jen volání funkce a všechna dat ti
zůstávají normálně v proměnných a atributech
($this->visits++;
apod.), jen je to dvojsečná sbraň –
mazání celého kontextu na konci requestu má své výhody a člověk nemusí
spoustu věcí řešit.