Foros del Web » Programando para Internet » PHP »

Problemas con Memcached

Estas en el tema de Problemas con Memcached en el foro de PHP en Foros del Web. Hola, Acabo de instalar memcached y tratando de grabar el resultado de una consulta a mysql no hay manera, os pego el código a ver ...
  #1 (permalink)  
Antiguo 03/09/2011, 09:16
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 5 meses
Puntos: 4
Problemas con Memcached

Hola,

Acabo de instalar memcached y tratando de grabar el resultado de una consulta a mysql no hay manera, os pego el código a ver si me podéis echar una mano.

Código PHP:
function mysql_query_cache($query$time){
        include_once 
'conecta.php';
       
$key md5($query);//Genera el nombre de la variable a guardar en la cache
       
echo 'Nombre cache: '.$key.'<br />';
        if(
class_exists('Memcache')){
            
$cache = new Memcache;
            
$cache->connect("localhost",11211) or die ("No se ha podido conectar");
            
            
$return $cache->get($key);
            if(!empty(
$return)){
                echo 
'Devuelve cache<br />';
                echo 
$return;
                return 
$return;
            }else{
                
$result mysql_query($query) or die(mysql_error()." : $sql");
                
$return $result;
                
$cache->set($key$returnMEMCACHE_COMPRESSED$time);
                echo 
' Graba cache<br />';
                return 
$return;
            }
        }else{
            echo 
'Memcache no está disponible<br />';
            return 
mysql_query($query);
        }        

    
//Se ejecuta la función
$resultado_query mysql_query_cache('SELECT titulo FROM tabla'10);//Ejecuta función que carga y graba la caché
    
while ($row_resultado mysql_fetch_array ($resultado_query)){
        echo 
$row_resultado['titulo'].'<br />';
 } 
El siguiente código siempre entra en "Graba caché" y devuelve los resultados de la tabla desde la ejecución de la consulta a mysql.
En el mismo código si en lugar de grabar el resultado de la query grabo "hola" en la cache, lo graba perfectamente, la verdad es que no se si está mal o si no se puede hacer lo que intento.

Muchas gracias
  #2 (permalink)  
Antiguo 03/09/2011, 09:34
Avatar de jcarrascal  
Fecha de Ingreso: enero-2008
Mensajes: 87
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Problemas con Memcached

Lo que pasa es que no puedes guardar un result de MySQL en Memcache porque para cuando vuelvas a ejecutar la consulta el recurso ya va a estar cerrado.

Lo que puedes hacer es recorrer el recurso almacenando el resultado en un array y guardar ese resultado en Memcache. Algo así:

Código PHP:
Ver original
  1. $return = $cache->get($key);
  2. if (false !== $return) {
  3.     echo 'Devuelve cache<br />';
  4.     return $return;
  5. } else {
  6.     $result = mysql_query($query) or die(mysql_error()." : $sql");
  7.     $return = array();
  8.     while (false !== ($row = mysql_fetch_object($result))) {
  9.         $return[] = $row;
  10.     }
  11.     $cache->set($key, $return, MEMCACHE_COMPRESSED, $time);
  12.     echo 'Graba cache<br />';
  13.     return $return;
  14. }
  #3 (permalink)  
Antiguo 03/09/2011, 10:51
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Problemas con Memcached

Muchas gracias jcarrascal,

Y luego como lo recorro al estilo como lo tenía para la query?

Código PHP:
while ($row_resultado mysql_fetch_array ($resultado_query)){
        echo 
$row_resultado['titulo'].'<br />';

Ando perdidísimo con los arrays.

Un saludo
  #4 (permalink)  
Antiguo 03/09/2011, 11:32
Avatar de jcarrascal  
Fecha de Ingreso: enero-2008
Mensajes: 87
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Problemas con Memcached

Puedes hacerlo con un foreach:

Código PHP:
Ver original
  1. $rows = mysql_query_cache('select ...', 3600);
  2. foreach ($rows as $row) {
  3.     echo $row->titulo . "<br/>\n";
  4. }
  #5 (permalink)  
Antiguo 04/09/2011, 12:33
 
Fecha de Ingreso: noviembre-2005
Mensajes: 182
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Problemas con Memcached

Hola,
Muchas gracias,

Finalmente conseguí hacer un recorrido del array cambiando mysql_fetch_object por mysql_fetch_array, veremos porque me va a tocar cambiar todo el código para poder adaptarlo, no hay forma de aprovechar las antiguas iterraciones de mysql con while?

Muchas gracias

Etiquetas: mysql, sql, tabla, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:39.