2012-02-23 14 views
7

La diferencia obvia es que cuando se almacena en memcache(d), los datos están disponibles en el sistema. Sin embargo, las sesiones almacenan datos por usuario, session_id() podrían usarse teóricamente para compartir estos datos con más usuarios.

Sin embargo, en términos de rendimiento, velocidad y uso de la memoria, ¿hay alguna diferencia?

+0

Ha olvidado que _SESSION no está en la memoria. –

+0

@rdlowrey, Wow. ¿Quién le dijo que el sistema de archivos es más lento que el almacenamiento en memoria proporcionado por memcache (d)? Sin mencionar que no toma en consideración si el hardware es SSD. – Gajus

+0

Todo el mundo que sugiera que Memcache es más rápido parece estar asumiendo un servidor de Memcache local (instalado en la misma máquina que la aplicación). Este puede ser el caso, cuando se usa a través de una red, sería muy dependiente de la red. –

Respuesta

5

Las sesiones de PHP se almacenan en el sistema de archivos de forma predeterminada. Puede modificar este comportamiento para que se guarden en una base de datos, o en su caso memcached.

Por lo tanto, en términos de rendimiento, memcached es generalmente más rápido que el sistema de archivos. Esto obviamente depende de su entorno.

Ver session_set_save_handler

+0

Por favor, comparta la fuente que indica que el sistema de archivos es más lento que memcached. – Gajus

+3

@Guy obviamente depende de su hardware y carga en el hardware respectivo. * Generalmente * encontrará que sus HDD de 7.2k RPM son más lentos que su memoria – Vitamin

+5

@Guy - ¿realmente necesita un "recurso" que explique que la unidad de disco duro es más lenta que la memoria de acceso aleatorio? Si es así, siéntase libre de verificar algunos números en wikipedia o comparar hdds con ram. Datos rápidos: el tiempo de acceso al ram se mide en nanosegundos y la tasa de datos en gigabytes (32gigs es lo que podemos obtener actualmente) mientras que incluso los ssd no se pueden comparar con los que alcanzan 500 mil megabytes por segundo con microsegundos de tiempo de búsqueda. –

0

Bueno, simplemente puede usar Memcache para $_SESSION. Eso es definitivamente más rápido, ya que no requiere una gran cantidad de llamadas a una API de PHP, sino que va directamente a la API de C en su lugar.

Bono de rendimiento pequeño, PHP realmente no es tan lento.

Si va a comparar Memcache con las sesiones del sistema de archivos: use Memcache. Realmente, debería hacerlo, ya que eso simplemente los almacena en la memoria en lugar de almacenarlos en el sistema de archivos. Mucho mas rapido Por supuesto, corres el riesgo de perder datos de sesión si el servidor Memcache se sobrecarga. El uso de memoria de Memcache será, por supuesto, más alto que la alternativa del sistema de archivos.

+0

Corrígeme si me equivoco pero no son PHP API/Extensiones creadas en C? – Bot

+0

Sí, lo son, pero si desea usar las funciones de memcache en bruto para almacenar la sesión en lugar del reemplazo '$ _SESSION', será un poco más lento, ya que PHP tendrá que interpretar y buscar cada llamada de función que realice. –

0

Las sesiones se almacenan en un archivo o base de datos. Memcache se almacena en la memoria para un acceso más rápido.

2

Manzanas y naranjas. Ellos logran dos cosas completamente diferentes. Su verdadera pregunta es el almacenamiento de archivos frente a Memcache. En teoría, podría almacenar información de la sesión en Memcache en lugar del almacenamiento basado en archivos. Entonces la ejecución de la sesión sería idéntica a presionar directamente un valor a Memcache.

En igualdad de condiciones, Memcache tiene un rendimiento mucho mejor que el almacenamiento en caché de archivos. En términos de memoria, cuando lee el archivo para obtener los datos (en este caso, el archivo de sesión), de todos modos va a la memoria, por lo que no ahorra espacio. De hecho, si se producen varias solicitudes a apache, es posible que diferentes procesos de trabajo necesiten leer el mismo archivo de sesión, cada uno utilizando su propio fragmento de memoria hasta que se obtenga el proceso de trabajo. Usando Memcache, esto no sucede.


Cuestiones relacionadas