2010-04-11 5 views
6

Ich Möglichkeiten der Verwendung von Memcached als Sitzungsspeicher für ein System gebaut auf CodeIgniter forschen. Hat jemand das schon mal gemacht (das ist wahrscheinlich eine dumme Frage :) und wenn ja, was sind deine Erfahrungen Leute? Haben Sie bereits vorhandene Bibliotheken/Erweiterungen verwendet? Was Leistungssteigerung haben Sie gesehen? Irgendwelche Vorbehalte?Verwendung als Sitzungsspeicher mit CodeIgniter Memcached

Antwort

6

Mit PHP setzen die Sitzungen in Memcache direkt, anstatt durch Framework-Code ist einfach - es ist nur die Änderung zwei Zeilen in der php.ini:

# see http://php.net/manual/en/memcache.ini.php 
session.save_handler = memcache 
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15" 

Dies nutzt die etwas ältere (aber immer noch vollständig unterstützt) 'Memcache' Erweiterung von PECL.

1

können Sie wählen die CodeIgniter Multicache-Bibliothek, die hier gefunden werden kann: http://www.haughin.com/code/multicache/

Im Code können Sie einfach verwenden wie folgt aus:

$this->load->library('cache'); 
//To use memcache 
$this->cache->useMemcache($iptomemcache, $port); /*if you want, you can check to see if the connection even worked, as this will return false if the connection failed.*/ 
$this->cache->save('testkey', 'testdata', NULL, 3600); /*caches the testdata string for 1 hour. */ 
echo $this->cache->get('testkey'); 
//To switch back to file based caching 
$this->cache->useFile(); 
//etc. 
-3

es nicht praktisch ist Memcached für die Lagerung zu verwenden von relationalen Daten (wie MySQL); Es wäre ineffizient, jedes Element von Memcached anzufordern und dann zu testen, ob es mit einer Abfrage übereinstimmt. Für ein solches Problem gibt es bessere Lösungen (z. B. Speichertabellen in MySQL).

Auf der anderen Seite, wenn Sie nach einem einfachen Schlüssel/Wert-Speicher suchen, ist dies sicherlich eine praktische Anwendung für Memcached. Worüber ich jedoch vorsichtig sein könnte, ist einen CodeIgniter-Treiber dafür zu schreiben. Die Schnittstelle für Memcached in PHP ist bereits todd einfach:

$memcached->get('my key'); 
$memcached->set('my key', 'my value'); 

Ich würde vorschlagen, einfach die Memcached Klassen direkt verwenden. Das Hinzufügen des zusätzlichen Aufwands zu CI erscheint mir einfach dreckig und unnötig.

Auf der anderen Seite, habe ich Implementierungen von Memcached für CodeIgniter Session Engine gesehen. Das ist sicherlich ein sehr guter Grund, einen Fahrer zu schreiben, und ich würde es sehr ermutigen (Sitzungen sind ein Schmerz im Nacken zu skalieren).

Viel Glück