Redis caché vs usar memoria directamente

142

Todavía no he usado Redis, pero escuché sobre eso y planeo probarlo como almacenamiento en caché.

Escuché que Redis usaba la memoria como base de datos del almacén de caché, entonces, ¿cuál es la diferencia si uso una variable como objeto o tipo de datos de diccionario para almacenar datos? me gusta:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

¿Cuál es la ventaja que tiene Redis?

hh54188
fuente

Respuestas:

222

Redis es un servidor de estructura de datos remoto . Ciertamente es más lento que simplemente almacenar los datos en la memoria local (ya que involucra viajes de ida y vuelta para buscar / almacenar los datos). Sin embargo, también trae algunas propiedades interesantes:

  • Todos los procesos de sus aplicaciones pueden acceder a Redis, posiblemente ejecutándose en varios nodos (algo que la memoria local no puede lograr).

  • El almacenamiento de memoria de Redis es bastante eficiente y se realiza en un proceso separado. Si la aplicación se ejecuta en una plataforma cuya memoria es basura recolectada (node.js, java, etc.), permite manejar una memoria caché / almacén mucho más grande. En la práctica, los montones muy grandes no funcionan bien con los idiomas recolectados de basura.

  • Redis puede conservar los datos en el disco si es necesario.

  • Redis es un poco más que un simple caché: proporciona varias estructuras de datos, varias políticas de desalojo de elementos, colas de bloqueo, pub / sub, atomicidad, secuencias de comandos Lua, etc.

  • Redis puede replicar su actividad con un mecanismo maestro / esclavo para implementar una alta disponibilidad.

Básicamente, si necesita que su aplicación se escale en varios nodos que comparten los mismos datos, entonces se requerirá algo como Redis (o cualquier otra clave / almacén de valores remotos).

Didier Spezia
fuente
55
Su último punto especialmente hace que parezca que cosas como Rlite son un poco inútiles: una tienda de diccionarios sería igual de adecuada en la mayoría de los casos de uso donde tiene un solo proceso. ¿Está bien?
naught101
1
Si. En mi opinión, el interés de Rlite es bastante limitado.
Didier Spezia
gracias por estas sugerencias, por lo que Redis es excelente para escalar, pero supongo que en caso de una simple aplicación de chat con un promedio de 300 a 500 objetos para recuperar en memoria, la estructura de datos en memoria hará el trabajo muy bien, si no más rápido, ya que estos son poco número?
Webwoman
2
@DidierSpezia very large heaps do not perform well with garbage collected languages¿puedes explicar por qué?
roottraveller
1
@roottraveller, creo que esto se debe a que el proceso de recolección de basura generalmente tiene que interrumpir la ejecución de su aplicación ("stop-the-world") para liberar memoria de almacenamiento dinámico, y cuanto mayor sea el almacenamiento dinámico, más durará esta interrupción.
Regorsmitz
3

Actualmente estamos más atraídos por la arquitectura menos servidor donde cada solicitud puede ir a un contenedor diferente. En este caso, redis puede jugar un papel muy importante.

No podemos usar menos caché simple en el servidor, ya que no podemos estar seguros de que nuestra solicitud sea atendida en el mismo contenedor donde se almacena nuestro caché simple.

En este caso, tenemos que usar redis, ya que almacena caché en una ubicación remota y podemos acceder incluso a los cambios de contenedor en la arquitectura sin servidor.

Bainade Ashish
fuente