Cache: IJournal v memcache

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

Zdravím všechny,
snažím se zprovoznit cache v Nette. Budu ji používat v prostředí, kdy je zátěž rozkládána mezi více web serverů. Přesto bych rád, aby cache byla sdílená. Používám memcache, tudíž je MemcachedStorage jasnou volbou. Pochopil jsem, že pro funkcionalitu mj. tagů musím použít objekt implementující IJournal. V současnosti však existuje jedině FileJournal, který nemůžu použít, protože ukládá data na disk do souboru. Jeho implementaci zevrubně nechápu, napadlo mě ji přepracovat (ohackovat) na memcache.

Zámky bych emuloval přes add a delete v memcache, pro souborové operace s handlerem si představuju blok z memcache načíst do php://memory nebo php://temp. Řízení interní cache přes mtime bych asi vynechal nebo emuloval přes $cas_token.

Ocenil bych rady a názory nejen jak to napsat, aby to fungovalo, ale aby to bylo přijatelné do Nette.

RadekDvorak
Člen | 11
+
0
-

Zkusil jsem vyrobit hack na fileJournal.

https://gist.github.com/1092290

dada-amater
Bronze Partner | 52
+
0
-

Mas to nejak otestovane? Resim neco podobneho, tak bych to rad pouzil. Moznost TAGovat mi chybi.

RadekDvorak
Člen | 11
+
0
-

Nedá se na to spolehnout. Memcache zahazuje data, i když není úplně plná, tudíž dochází ke ztrátám celého žurnálu. Upřednostnil jsem proto standardní fileJournal.

dada-amater
Bronze Partner | 52
+
0
-

To ja vim, proto pouzivam memcache redundanci. Jde mi ale o to, ze mame vice frontend serveru. A kazdby by mel svuj journal, coz je spatne. Kazdy request loadbalancer preda jednomu z X serveru. Pokud bych pouzival napriklad nfs, tak se to uplne posere, neumi zamikat. Reseni je implementovat to do databaze, ale je to dost neefektivni.

RadekDvorak
Člen | 11
+
0
-

Našemu adminovi na nfs posixové zamykání funguje. Proto používáme fileJournal.

Výše uvedený kód je spíš pracovní nástřel, nebyl určen do produkčního prostředí, ale pro testování varianty řešení.

dada-amater
Bronze Partner | 52
+
0
-

Asi to tak je, ze nfs4 uz to zamykani umi. Resil nejak vas admin cachovani nfs? Testoval jsem to, zamykani funguje, ale nekdy trva, kdyz server A uvolni zamek, server B ceka nekdy i dlouhy vteriny. V praxi je to pak nepouzitelny, kdyz cely server B ceka, nez A neco doresi.

Filip Procházka
Moderator | 4668
+
0
-

Pokud chcete memory storage s journalem a cachí s vyřešeným zamykáním, tak bych skromně doporučil raději kdyby/redis, který je production-ready ;)

dada-amater
Bronze Partner | 52
+
0
-

Diky Filipe

<?php
namespace Nette\Caching\Storages;
use Nette,
    Nette\Caching\Cache;

class RedisJournal extends Nette\Object implements IJournal {
	//kdo to dopise? :-)
}
?>
dada-amater
Bronze Partner | 52
+
0
-

No ne, koukam ty uz to mas?

https://github.com/…sJournal.php

Poklona.