Nette\Caching – vlozenie objektov

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

Rozmyslam nad tym vyuzit Nette\Caching na ukladanie objektov, len neviem ci je to spravny postup. Mam napr. objekt User() a ten si nacitava svoje data z databazy. Napr. User(1) su data z tabulky usersID=1. User s tymto ID-ckom, moze byt pocas behu aplikacie volany viackrat. Takze by som rad „nakesoval“ tento objekt aby sa nemusel robit znova dotaz na databazu.

Je rozumne tento objekt napr. serializovat a vlozit do cache a potom ho v pripade potreby vytiahnut, unserializovat a vratit? Je este mozne, aby cache drzala tieto data len pocas jedneho „sedenia“? Cize, ked sa stranka nacita 2×, tak sa cache vymaze? V dokumentacii je mozno nastavit expire: „expire ⇒ (int) čas, kdy obsah vyexpiruje“, cize ked to napr. nastavim na 0, tak by to malo fungovat?

Druha moznost mi este napadla pouzit staticky parameter objektu:

<?php
class User
{
   static private $cache=Array();

   private function __construct($userId=0)
   {
       // load from database
   }

   static public function create($userId=0)
   {
      if (isSet(self::$cache[$userId])) {
        return self::$cache[$userId];
      } else {
        $user = new self($userId);
        self::$cache[$userId] = $user
        return $user;
      }
   }
}
?>

Len som si nie isty, co ma v tomto pripade caka v buducnosti.

Dik za rady.

David Grudl
Nette Core | 8218
+
0
-

Použít diskovou cache je nevhodné, řešením je tedy statické úložiště. Příčemž je možné použít i třídu Cache a doprogramovat statické úložiště, například třídu StaticStorage. Jako vzor by mohla posloužit DummyStorage.

piler
Člen | 111
+
0
-

David Grudl napsal(a):

Použít diskovou cache je nevhodné, řešením je tedy statické úložiště. Příčemž je možné použít i třídu Cache a doprogramovat statické úložiště, například třídu StaticStorage. Jako vzor by mohla posloužit DummyStorage.

Vdaka za nazor. Skusim vytvorit triedu na pracu so static cache :).