Cachování: Použití memcached místo memcache

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

Navrhoval bych upravit třídu MemcachedStorage tak, aby používala rozšíření memcached místo memcache? Hlavním důvodem je to, že memcached nepotřebuje PEAR.

Další variantou (z důvodu zpětné kompatibility) by bylo přidat možnost výběru, zda se použije memcache nebo memcached.

Memcached vyžaduje PHP 5.2.0 nebo novější (stejně jako Nette) takže zde by problém být neměl.

Předem děkuji.

jtousek
Člen | 951
+
0
-

Tohle se tu už řešilo.

David Grudl
Nette Core | 8218
+
0
-

memcache taky nevyžaduje PEAR

venus
Člen | 14
+
0
-

jtousek: To je o něčem jiném. Řešilo se tam pojmenování.

David Grundl: Znamená to tedy, že memcached nebude?

Editoval venus (30. 12. 2010 23:44)

David Grudl
Nette Core | 8218
+
0
-

To jsem přece nenapsal.

venus
Člen | 14
+
0
-

Ale bohužel ani to, že by se to mělo implementovat :-(.

paranoiq
Člen | 392
+
0
-

jaké jsou důvody pro použití memcached?

z rozdílů vím pouze o tom, že podporuje větší zvěřinec atomických operací (což Nette\Cache nevyužije) a podporuje připojení k více memcached serverům zároveň. potřebuje to někdo?

jtousek
Člen | 951
+
0
-

Dle mého názoru jsou teď v Nette mnohem důležitější věci na implementaci než tohle (formuláře a validátory, moduly, API pro latte makra).

Tzn. pro toho kdo to chce bych to viděl na odpověď „pošli pull request“.

venus
Člen | 14
+
0
-

Dobrá, upravím to a pošlu pull request.

Panda
Člen | 569
+
0
-

A proč je to vlastně potřeba?

A jakou cestou chceš jít? Upravit stávající MemcachedStorage, nebo k němu vytvořit alternativu? První varianta je poměrně neprůchodná (jak David psal, rozšíření memcache tu bylo dřív a je větší šance, že na něj člověk narazí), u druhé mi připadá zbytečné mít 2 drivery na totéž. Asi nejlepší cestou se mi zdá přepsat stávající MemcachedStorage tak, aby byl schopen použít obě rozšíření.

venus
Člen | 14
+
0
-

Chtěl bych upravit stávající MemcachedStorage tak aby dokázal použít obě varianty (memcache i memcached). Jako nejschůdnější řešení (kvůli zpětné kompatibilitě) mi připadá přidání dalšího parametru do kontruktoru.

Panda
Člen | 569
+
0
-

Spíš udělej autodetekci s tím, že preferováno by bylo staré memcache. Mělo by stačit na konec souboru s MemcacheStorage dát něco na způsob:

if (!extension_loaded('memcache') && extension_loaded('memcached')) {
	class Memcache extends \Nette\Object
	{
		private $memcached;

		public function __construct()
		{
			$this->memcached = new \Memcached();
		}

		public function connect($host, $port)
		{
			$m->addServer($host, $port);
		}

		// ...
	}
}

Tím zajistíš dodefinování třídy Memcache, která bude sloužit jako obálka nad Memcached v případě, že nebude načtené rozšíření memcache.

Editoval Panda (31. 12. 2010 21:01)

jtousek
Člen | 951
+
0
-

To bych řešil spíše samostatnými třídami s tím že nějaká statická factory metoda by řešila chování, které popisuje Panda.

venus
Člen | 14
+
0
-

Při testování jsem narazil na problém, že memcached neakceptuje (RES_WRITE_FAILURE) v klíči hodnotu \x00, kterou Nette používá jako oddělovač jmenného prostoru cache a klíče položky.

Panda
Člen | 569
+
0
-

Zkusil bych str_replace na 0x01.

Editoval Panda (3. 1. 2011 9:43)

venus
Člen | 14
+
0
-

Jj. Něco podobného jsem udělal – při použití memcached zaměňuji znak \x00 na \.

Panda
Člen | 569
+
0
-

To nedělej, vyber si nějaký znak, který není běžně používaný, třeba ty malé mrchy typu SOH, ACK… Jinak může dostat cache pro klíč cache z NS name\space data pro klíč space\cache z NS name. A to přeci nechceš.

venus
Člen | 14
+
0
-

To by bylo samozřejmě nejlepší, ale bohužel nejsou v klíči akceptovány hodnoty 0–31 z ASCII tabulky.

paranoiq
Člen | 392
+
0
-

a co 0×7F (DEL)?

venus
Člen | 14
+
0
-

Také nefunguje.

paranoiq
Člen | 392
+
0
-

@venus: opravdu jsem si nevšiml, že bys to v této diskuzi zmiňoval, tak se pro jistotu zeptám ještě jednou. jaké jsou výhody použití memcached oproti memcache? určitě máš nějaký reálný důvod proč se s tím pekluješ ;->

raketoplan2005
Člen | 147
+
0
-

+1
Rád bych tento požadavek podpořil, potože např. můj poskytovatel hostingu použití memcached narozdíl od memcache umožňuje.

Editoval raketoplan2005 (5. 1. 2011 12:18)