2010-04-11 27 views
6

estoy investigando posibilidades de utilizar memcached como dispositivo de almacenamiento sesión para un sistema construido sobre CodeIgniter. Alguien ha hecho esto antes (probablemente sea una pregunta estúpida :) y si es así, ¿cuál es tu experiencia, amigos? ¿Has usado alguna biblioteca/extensión existente? En cuanto a la mejora del rendimiento, ¿qué has visto? ¿Alguna advertencia?Usando memcached como almacenamiento de sesión con CodeIgniter

Respuesta

6

Tener PHP puso las sesiones en Memcache directamente, en lugar de a través de código marco es fácil - es sólo el cambio de dos líneas en el 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" 

Este utiliza el poco mayores (pero aún totalmente compatible) extensión 'memcache' de PECL.

1

Usted puede elegir el CodeIgniter Multicache Biblioteca, que se puede encontrar aquí: http://www.haughin.com/code/multicache/

En el código que puede utilizar simple como esto:

$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

No es práctico usar Memcached para el almacenamiento de datos relacionales (como MySQL); Sería ineficiente solicitar cada elemento de Memcached y luego probar para ver si coincide con una consulta. Hay mejores soluciones para un problema como ese (considere las tablas de memoria en MySQL, por ejemplo).

Por otro lado, si está buscando almacenamiento de clave/valor simple, esa es ciertamente una aplicación práctica para Memcached. De lo que sería un poco cauteloso, sin embargo, es escribir un controlador CodeIgniter para ello. La interfaz para Memcached en PHP ya es muy simple:

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

Sugeriría simplemente usar las clases de Memcached directamente. Agregar toda la sobrecarga extra a CI parece sucio e innecesario para mí.

Por otro lado, he visto implementaciones de Memcached usadas para el motor de sesión de CodeIgniter. Esa es ciertamente una razón muy válida para escribir un controlador, y lo recomendaría encarecidamente (las sesiones son un dolor en el cuello para escalar).

Buena suerte

Cuestiones relacionadas