Jak udržet statická data v paměti, aby se jednou natáhla z databáze pro všechny příští requesty?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza.Mottl
Člen | 104
+
0
-

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
+
0
-

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
+
0
-

Diky. Pouvazuji o Memcached. Musel bych serializovat Array a ulozit ho do cache.

newPOPE
Člen | 648
+
0
-

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.

Honza.Mottl
Člen | 104
+
0
-

Diky. Necham optimalizaci az dopisi dalsi kus noveho kodu.

hitzoR
Člen | 51
+
0
-

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
+
0
-

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.