Visa ett inlägg
Oläst 2007-09-26, 00:07 #5
mattiaseriksson mattiaseriksson är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2007
Inlägg: 4
mattiaseriksson mattiaseriksson är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2007
Inlägg: 4
Vi har löst det genom att använda ett extra värde i memcached för varje "namespace", dvs för varje objekttyp skulle man kunna säga.

Ett kort exempel:
1. Först försöker man hämta upp namespace-värdet från memcached:
$ns_key = $memcache->get("userinfo_namespace_key");

2. Kollar om den finns sen tidigare...
if($ns_key===false)
{
2.1 Om inte så slumpar man fram ett värde för keyn, detta för att en annan server kan vid samma tidpunkt skapa samma värde... med slumpen minimerar man chansen att de blir strul, dvs att de börjar på samma värde.
$ns_key = rand(1, 10000);
2.2 Namespace-värdet sparas ner
$memcache->set("foo_namespace_key", $ns_key);
}

3. Nu ska objektet hämtas upp och då använder man namespace-värdet i objektets-nykel.
$my_key = "foo_".$ns_key."_12345";

4. För att sedan rensa ett helt namespace så ökar man bara på namespace-värdet med 1.... så kommer t.ex. "foo_".$ns_key."_12345" inte ha samma värde nästa gång, för $ns_key har ökat med 1 och alltså missar den i cachen o hämtar upp objektet från databasen istället..
$memcache->increment("foo_namespace_key");

De hela är kanske lite lurigt att förstå, fråga gärna om det är oklart :-)
mattiaseriksson är inte uppkopplad   Svara med citatSvara med citat