2012-04-23 22 views
63

Actualmente estoy usando db (mysql) para almacenar mis sesiones. Funciona muy bien, pero es un poco lento.¿Qué tan seguro es almacenar la sesión con Redis?

Se me ha pedido que use Redis, pero me pregunto si es una buena idea porque he oído que Redis retrasa las operaciones de escritura, así que tengo un poco de miedo porque las sesiones deben ser en tiempo real.

¿Ha tenido tales problemas?

+1

Dado que Redis dice que tiene durabilidad opcional, entonces diría que es seguro usarlo si opta por la persistencia en la unidad de disco duro. Sin embargo, para los datos de la sesión, definitivamente los guardaría en la memoria RAM (lo que significa que no me preocuparía la durabilidad como parte de toda la prueba). Lo peor que debería suceder en caso de que pierda datos de sesión es que sus usuarios cierren la sesión. –

+1

sí, pero esto es parte de mi requisito, los usuarios no deberían tener que volver a iniciar sesión, por cierto algunos datos de los usuarios se conservan en la sesión mientras que los usuarios no inician sesión (usuarios invitados). Buscarán Redis RAM pero con el registro y/o respaldo habilitados. Si perdimos algunas sesiones, es aceptable. – Trent

+0

Bueno, si está utilizando un almacenamiento en disco duro, ¿de qué sirve usar Redis? Probablemente retrasa la confirmación real en el disco para aumentar el rendimiento, lo mismo que MySQL podría hacer si se configura de esa manera. ¿Consideró mover su MySQL a un subsistema de E/S más rápido?No es como si Redis mágicamente trabajara 50 veces más rápido en el mismo hardware, si tiene que usar el mismo subsistema de E/S. –

Respuesta

110

Redis es perfecto para almacenar sesiones. Todas las operaciones se realizan en la memoria, por lo que las lecturas y escrituras serán rápidas.

El segundo aspecto es la persistencia del estado de la sesión. Redis le ofrece mucha flexibilidad sobre cómo desea mantener el estado de la sesión en su disco duro. Usted puede ir a través http://redis.io/topics/persistence para aprender más, pero a un alto nivel, aquí están sus opciones -

  1. Si usted no puede permitirse perder ninguna sesión, appendfsync always SET en el archivo de configuración. Con esto, Redis garantiza que todas las operaciones de escritura se guardan en el disco. La desventaja es que las operaciones de escritura serán más lentas.
  2. Si está de acuerdo con perder aproximadamente 1 valor de datos, use appendfsync everysec. Esto dará un gran rendimiento con datos razonables garantías
9

Básicamente hay dos tipos principales disponibles: snapsnots asincrónicos y fsync(). Se llaman RDB y AOF respectivamente. Más sobre persistence modes on the official page.

El manejo de la señal del proceso daemonizado se sincroniza con el disco cuando recibe un SIGTERM por ejemplo, por lo que los datos seguirán allí después de un reinicio. Creo que el daemon o el sistema operativo debe bloquearse antes de que vea una corrupción de integridad, incluso con la configuración predeterminada (instantáneas RDB).

La configuración de AOF utiliza un archivo de solo agregar que registra los comandos que recibe el servidor y recrea la base de datos desde cero en el arranque en frío, desde el archivo guardado. La política predeterminada de sincronización de disco es descargar una vez por segundo (IIRC) pero se puede configurar para bloquear y escribir en cada comando.

Utilizando ambas las instantáneas y el registro de incremento parece ofrecer tanto un largo plazo No te-mente-si-i-miss-a-pocos segundos de datos- con un enfoque más seguro, pero costoso registro incremental. Redis admite la agrupación fuera de la caja, por lo que la replicación también se puede hacer.

Estoy usando la configuración de RDB predeterminada y guardo las instantáneas en FTP remoto. No he visto una falla que haya causado una pérdida de datos todavía. Es muy probable que se produzcan fallas agudas de hardware o cortes de energía, pero estoy alojado en un VPS. Escasas posibilidades de que eso ocurra :)

Cuestiones relacionadas