2010-11-03 60 views
9

¿Hay alguna forma de almacenar datos pequeños en la memoria RAM usando PHP para que pueda tener acceso a los datos entre una sesión diferente en lugar de regenerarla? Algo similar a memcached (no tengo acceso a memcahced). Mi solución actual es solo guardar los datos en un archivo.¿Cómo puedo almacenar datos en la memoria RAM usando PHP?

+0

posible duplicado de [PHP - Las variables del lado del servidor que "vivirán" para siempre?] (Http://stackoverflow.com/questions/4086044/php-server-side-variables-that-will-live-for- siempre) - hay muchas respuestas allí que son aplicables a su pregunta. – Gordon

+0

¿Por qué? En cualquier sistema operativo moderno (donde el almacenamiento no está en un sistema de archivos compartido), los datos del archivo se almacenan en caché en la memoria de todos modos. – symcbean

+0

Editado mi respuesta. – Strae

Respuesta

4

estoy asumiendo que usted está en un servidor compartido de algún tipo.

memcached u otra solución de almacenamiento en caché es de hecho la única manera de hacer esto.

Sesiones, el método más prominente de la persistencia de datos a través de las páginas PHP, trabajo basado en archivos. En su lugar, puede cambiar el controlador de sesión para que se base en la base de datos, pero eso no está basado en la RAM, tampoco.

Por lo que yo puedo ver, sin cambiar su sistema en el nivel de raíz (por ejemplo, para instalar memcached, o archivos de almacén de sesión en un disco RAM), esto no es posible.

5

Siempre puede usar una base de datos en la memoria para guardar los datos. Posiblemente exagerado, sin embargo.

+1

Me sorprende que nadie más haya subido tu respuesta. He tenido éxito usando tablas de memoria mysql y son realmente rápidas.RDB puede ser excesivo para las sesiones, pero es una gran opción cuando no tiene acceso a memcached o/dev/ –

12

APC?

Funciona de forma diferente a memcached; en memcached puedes acceder a los datos de varios idiomas (c, python, etc.) mientras que APC solo funciona para PHP.

EDIT ¿Estás seguro de que APC está instalado correctamente? ¿Agregó extension=apc.so en su php.ini? Y para reiniciar apache (estoy suponiendo que estés en un servidor de lámpara con apache2)? ¿Qué dice phpinfo(); sobre APC?

Ésta es una simple prueba que funcionan a la perfección para mí:

<?php 
/* 
* page.php 
* Store the variable for 30 seconds, 
* see http://it.php.net/manual/en/function.apc-add.php 
* */ 
if(apc_add('foo', 'bar', 30)){ 
    header('Location: page2.php'); 
}else{ 
    die("Cant add foo to apc!"); 
} 

<?php 
/* 
* page2.php 
* */ 
echo 'foo is been set as: ' . apc_fetch('foo'); 

PS: Yo prefiero usar apc_add sobre apc_store, pero la única diferencia entre ellos es que duerma apc_add sobrescribir la variable, pero se producirá un error si se llama dos veces con la misma clave:

Almacene la variable con este nombre. las claves son exclusivas de caché, por lo que intentar usar apc_add() para almacenar datos con una clave que ya existe no sobrescribirá los datos existentes y, en su lugar, devolverá FALSE. (Esta es la única diferencia entre apc_add() y apc_store().)

Es una cuestión de gusto/tarea de la secuencia de comandos, pero el ejemplo anterior funciona con apc_store también.

+0

No puede instalar memcached, por lo que es probable que no pueda instalar APC –

+0

Verdadero, pero muchos hosts lo permiten el uso de APC (con algunas limitaciones) - tenemos que preguntarle. – Strae

3

crear un archivo en /dev/shm y se mantendrá en la memoria hasta que la máquina se reinicia. Esto puede o no ser más rápido que usar cualquier archivo antiguo, dependiendo de su patrón de uso.

+0

Parece estar en un servidor compartido –

+2

@Pekka Bueno, entonces está jodido ... Esperemos que su archivo sea almacenado en caché por el sistema operativo. – kijin

Cuestiones relacionadas