storeRequest a datová náročnost
- ovlach
- Člen | 1
Mám drobný problém. V php.ini používáme session.save_path s připojením do memcache:
tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=2
Používáme systém backlinků. Pokud tedy v jednoduché aplikaci(kterou přikládám) neustále klikám na login, generuje se nový a nový klíč stále dokola (kvůli Nette\Utils\Strings::random(5) v storeRequest()) a díky tomu se do session ukládá x requestů zpět.
Příklad struktury:
[Nette.Application/requests] => Array
(
[npaj0] => Array
(
[T] => 1394202284
[B] =>
)
[464tf] => Array
(
[T] => 1394202557
[B] =>
)
[5bwf7] => Array
(
[T] => 1394202560
[B] =>
)
[ddkyc] => Array
(
[T] => 1394202610
[B] =>
)
[0i6z8] => Array
(
[T] => 1394202766
[B] =>
)
[luzj5] => Array
(
[T] => 1394202779
[B] =>
)
)
Řekněme že memcache je nastavená na 1GB. Pokud začnu počítat velikost datové struktury kterou vygeneruje storeRequest metoda tak se poměrně rychle dostanu k zaplnění celé memcache (uvažujme že mám více uživatelů na webu). Toto má důsledek že se někteří uživatelé nedokážou přihlásit a samotná memcache musí neustále odstraňovat nejméně používané klíče z paměti (dost náročné na CPU).
Potřebovali bychom vědět jak tuto situaci efektivně vyřešit (napadá nás ukládat pouze nejposlednějsí request místo všech a nebo klíč zafixovat na konstatní hodnotu).
S pull requestem jsme ochotni pomoci.
Jednoduchý example jak si to vyzkoušet:
http://git.nanobyte.cz/…/tree/master
- Jan Tvrdík
- Nette guru | 2595
@ovlach: Vytvářet nový backlink při každém
požadavku je (momentálně) chyba návrhu z vaší strany, protože to na
takový způsob použít není stavěné. Správné řešení je volat
storeRequest
pouze těsně
před redirectem na přihlášení. Návrat na předchozí stránku po
kliknutí na odkaz „přihlásit se“ je potřeba řešit analýzou
refereru. Což není moc pěkné, takže pokud se podaří vymyslet rozumnou
úpravu Nette, tak by to bylo super.
Několikrát byl tento problém už řešen tady na fóru, doporučuji tedy hledat.