Entiendo que Redis sirve todos los datos de la memoria, pero también persiste durante el reinicio del servidor para que cuando el servidor se reinicie lea en la memoria todos los datos del disco. ¿O es siempre una tienda en blanco que solo almacena datos mientras las aplicaciones se ejecutan sin persistencia?
122
Respuestas:
Le sugiero que lea sobre esto en http://redis.io/topics/persistence . Básicamente, pierde la persistencia garantizada cuando aumenta el rendimiento utilizando solo el almacenamiento en memoria. Imagine un escenario en el que INSERTAR en la memoria, pero antes de que persista, el disco pierde energía. Habrá pérdida de datos.
Redis admite las llamadas "instantáneas". Esto significa que hará una copia completa de lo que hay en la memoria en algunos momentos (por ejemplo, cada hora completa). Cuando pierde energía entre dos instantáneas, perderá los datos del tiempo entre la última instantánea y el bloqueo (no tiene por qué ser un corte de energía ...). Redis negocia la seguridad de los datos con el rendimiento, como hacen la mayoría de las bases de datos NoSQL.
La mayoría de las bases de datos NoSQL siguen un concepto de replicación entre múltiples nodos para minimizar este riesgo. Redis se considera más un caché rápido que una base de datos que garantiza la coherencia de los datos. Por lo tanto, sus casos de uso suelen diferir de los de las bases de datos reales: puede, por ejemplo, almacenar sesiones, contadores de rendimiento o lo que sea con un rendimiento inigualable y sin pérdida real en caso de un bloqueo. Pero procesar pedidos / historiales de compra, etc., se considera un trabajo para las bases de datos tradicionales.
fuente
El servidor Redis guarda todos sus datos en el disco duro de vez en cuando, lo que proporciona cierto nivel de persistencia.
Guarda datos en uno de los siguientes casos:
BGSAVE
comandoPero los datos en redis no son realmente persistentes, porque:
BGSAVE
la operación solo se puede realizar si tiene suficiente RAM libre (la cantidad de RAM adicional es igual al tamaño de redis DB)NB: El
BGSAVE
requisito de RAM es un problema real, porque redis continúa funcionando hasta que no hay más RAM para ejecutar, pero deja de guardar datos en el disco duro mucho antes (aproximadamente al 50% de la RAM).Para obtener más información, consulte Persistencia de Redis .
fuente
Es cuestión de configuración. Puede tener ninguna persistencia, parcial o total de sus datos en Redis. La mejor decisión será impulsada por las necesidades técnicas y comerciales del proyecto.
De acuerdo con la documentación de Redis sobre persistencia , puede configurar su instancia para guardar datos en el disco de vez en cuando o en cada consulta, en pocas palabras. Proporcionan dos estrategias / métodos AOF y RDB (lea la documentación para ver detalles), puede usar cada uno solo o juntos.
Si desea una "persistencia similar a SQL", han dicho:
fuente
La respuesta es generalmente sí , sin embargo, una respuesta más completa realmente depende del tipo de datos que esté tratando de almacenar. En general, la respuesta corta más completa es:
Habiendo dicho esto, por defecto Redis será persistir datos instantáneas a intervalos periódicos (al parecer esto es cada 1 minuto, pero no he verificado esto - esto es descrito por el artículo siguiente, que es una buena introducción básica):
http://qnimate.com/redis-permanent-storage/
TL; DR
De los documentos oficiales :
Redis debe configurarse explícitamente para la persistencia AOF, si es necesario, y esto dará como resultado una penalización del rendimiento y un aumento de los registros. Puede ser suficiente para una persistencia relativamente confiable de una cantidad limitada de flujo de datos.
fuente
Puede elegir no tener persistencia en absoluto. Mejor rendimiento, pero todos los datos se pierden cuando Redis se apaga.
Redis tiene dos mecanismos de persistencia: RDB y AOF.RDB usa un programador de instantáneas globales y AOF escribe actualizaciones en un archivo de registro de solo apéndice similar a MySql.
Puede usar uno de ellos o ambos. Cuando Redis se reinicia, construye datos a partir de la lectura del archivo RDB o el archivo AOF.
fuente