Pregunta

En general, tengo el siguiente escenario:

  • Fetch producto y sus datos relacionados de la base de datos
  • Convertir datos captados a php 'producto' objeto
  • producto objeto de caché en sesión

La memoria caché es de sólo lectura, es decir los clientes de visualización de productos en el sitio.

Pero hay llamadas como getProductIdsByCategory($categoryId) y los productIds partir de estos resultados se almacenan en caché también, por usuario, no se utiliza la caché global que he leído sobre.

Un problema es que si alguien en la parte de administración añade un nuevo producto y lo relaciona con una categoría, entonces los clientes no tendrán el nuevo productId llegar en su getProductIdsByCategory en caché hasta que se inicie una nueva sesión.

¿Hay una manera de limpiar $_SESSION['x'] por ejemplo a partir de todas las sesiones en el servidor cuando se añade un nuevo producto? No quiero destruir todas las sesiones porque los clientes entonces perderán sus inicios de sesión, etc.

O debería mover estas búsquedas productId en caché en la memoria caché global?

p.s estoy usando una caché hecha a la medida, no memcached o similar.

Gracias

¿Fue útil?

Solución

Por defecto, los datos de sesión es sólo archivos serializados en algún lugar de su sistema de archivos, y es posible ir modificar todos ellos para eliminar la información de que se trate (respetando bloqueo, de modo que no se sube en todas las sesiones abiertas en ese momento) .

Realmente no lo recomiendo, sin embargo. Lo que yo recomendaría es hacer un método de señalización que estos datos almacenados en caché debe ser renovada, como una marca de tiempo de base de datos almacenada que consigue miraba cuando session_start() sucede, y si los datos en caché es más antigua que la fecha y hora, se limpia la caché.

Otros consejos

Sonidos ser como usted podría hacer con verdadero estado compartido a través de un sistema de almacenamiento en caché como Memcache.

La única otra forma que imprime a la mente es tener la verificación de la aplicación de las banderas de los datos de caché sucios y eliminarlo en sí, o si su caché se encuentra en una base de datos en una forma serializada parsable escribir un caros script para leer a todos, pero que va a crear lag desagradable con las solicitudes que ya han leído los datos.

Me gustaría ir con estado compartido real que la comprobación de copias de objetos.

A menos que se almacenan en una base de datos de sesiones, despejando cualquier bit de datos específico será complicado.

Yo sugeriría el almacenamiento en caché de archivos en lugar de las sesiones de usuario. De esta forma lograr los mismos beneficios, pero se obtiene un control total sobre lo que se almacena en caché y cuando se limpia.

Para desactivar todas las sesiones existentes para una aplicación particular, simplemente modifique su solicitud para cambiar el nombre de la sesión utilizando session_name('new_session_name') de PHP. Esta función tiene que ser llamado antes de cada llamada a session_start ().

Esto en realidad no clara las sesiones actuales, sino que los hace ya no es útil para esta aplicación.

Sí, usted debe moverlo a una caché global. Las sesiones no están destinados a ser visitada a nivel mundial, no creo que es posible.

para borrar un uso valor de sesión:

unset($_SESSION['x']); 

Puede bucle en sesiones para que

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top