He estado leyendo algunos documentos de Redis y probando el tutorial en http://try.redis-db.com/ . Hasta ahora, no puedo ver ninguna diferencia entre Redis y las tecnologías de almacenamiento en caché como Velocity o el Enterprise Library Caching Framework
Efectivamente, solo está agregando objetos a un almacén de datos en memoria utilizando una clave única. No parece haber ninguna semántica relacional ...
¿Qué me estoy perdiendo?
Respuestas:
No, Redis es mucho más que un caché.
Como una caché, Redis almacena pares clave = valor. Pero a diferencia de un caché, Redis le permite operar con los valores. Hay 5 tipos de datos en Redis: cadenas, conjuntos, hash, listas y conjuntos ordenados. Cada tipo de datos expone varias operaciones.
La mejor manera de entender Redis es modelar una aplicación sin pensar en cómo la va a almacenar en una base de datos.
Digamos que queremos construir StackOverflow.com. Para que sea simple, necesitamos preguntas, respuestas, etiquetas y usuarios.
Preguntas de modelado, usuarios y respuestas
Cada objeto se puede modelar como un mapa. Por ejemplo, una Pregunta es un mapa con campos {id, título, fecha_preguntas, votos, preguntas_por, estado}. Del mismo modo, una respuesta es un mapa con campos {id, question_id, answer_text, respondido_por, votos, estado}. Del mismo modo, podemos modelar un objeto de usuario.
Cada uno de estos objetos se puede almacenar directamente en Redis como Hash. Para generar identificadores únicos, puede usar el comando de incremento atómico. Algo como esto -
Manejo de votos
Ahora, cada vez que alguien vota una pregunta o una respuesta, solo necesita hacer esto
Lista de preguntas para la página de inicio
A continuación, queremos almacenar las preguntas más recientes para mostrar en la página de inicio. Si estuviera escribiendo un programa .NET o Java, almacenaría las preguntas en una Lista. Resulta que esa es la mejor manera de almacenar esto también en Redis.
Cada vez que alguien hace una pregunta, agregamos su identificación a la lista.
Ahora, cuando desea renderizar su página de inicio, le pregunta a Redis las 25 preguntas más recientes.
Ahora que tiene los identificadores, recupere los elementos de Redis utilizando la canalización y muéstrelos al usuario.
Preguntas por etiquetas, ordenadas por votos
A continuación, queremos recuperar preguntas para cada etiqueta. Pero SO le permite ver las preguntas más votadas, nuevas preguntas o preguntas sin respuesta debajo de cada etiqueta.
Para modelar esto, utilizamos la función Conjunto clasificado de Redis. Un conjunto ordenado le permite asociar una puntuación con cada elemento. Luego puede recuperar elementos en función de sus puntajes.
Vamos a seguir adelante y hacer esto para la etiqueta Redis
¿Qué hicimos por aquí? Agregamos preguntas a un conjunto ordenado y asociamos un puntaje (número de votos) a cada pregunta. Cada vez que se vota una pregunta, incrementaremos su puntaje. Y cuando un usuario hace clic en "Preguntas etiquetadas Redis, ordenadas por votos", simplemente hacemos una
zrevrange
y recuperamos las preguntas principales.Preguntas en tiempo real sin actualizar la página
Y finalmente, una característica adicional. Si mantiene abierta la página de preguntas, SO le notificará cuando se agregue una nueva pregunta. ¿Cómo puede ayudar Redis aquí?
Redis tiene un modelo pub-sub. Puede crear canales, por ejemplo "channel_questions_tagged_redis". Luego, los
subscribe
usuarios a un canal en particular. Cuando se agrega una nueva pregunta, le enviaríapublish
un mensaje a ese canal. Todos los usuarios recibirían el mensaje. Tendrá que usar una tecnología web como tomas web o cometas para entregar el mensaje al navegador, pero Redis lo ayuda con toda la tubería en el lado del servidor.Persistencia, fiabilidad, etc.
A diferencia de un caché, Redis conserva los datos en el disco duro. Puede tener una configuración maestro-esclavo para proporcionar una mayor confiabilidad. Para obtener más información, consulte los temas de Persistencia y Replicación aquí: http://redis.io/documentation
fuente
No solo un caché.
fuente
Redis tiene habilidades únicas como sua-scripts ultrarrápidos. Su tiempo de ejecución es igual a la ejecución de los comandos C. Esto también brinda atomicidad para la sofisticada manipulación de datos de Redis requerida para el trabajo de muchos objetos avanzados como cerraduras y semáforos.
Hay un Redis basado en la cuadrícula de datos de memoria llamado Redisson que permite construir fácilmente aplicaciones distribuidas en Java . Gracias a distribuidos
Lock
,Semaphore
,ReadWriteLock
,CountDownLatch
,ConcurrentMap
objetos y muchos otros.Perfectamente trabaja en la nube y es compatible con AWS ElastiCache , AWS ElastiCache Cluster y Azure Redis Caché de apoyo
fuente
En realidad, no hay dependencia entre la representación de datos relativos (o cualquier tipo de representación de datos) y el rol de la base de datos (caché, persistencia permanente, etc.).
Redis es bueno para el caché, es cierto, pero es mucho más que solo un caché. Es una base de datos de alta velocidad totalmente en memoria. Sí persiste los datos en el disco. No es relacional, es almacenamiento de valor clave.
Lo usamos en producción. Redis nos ayuda a crear software que maneja miles de solicitudes por segundo y mantener los datos comerciales de los clientes durante todo el ciclo de vida natural.
fuente
Redis es una memoria caché que se adapta mejor al entorno distribuido / arquitectura de microservicios.
Es rápido, confiable, proporciona atomicidad y consistencia y tiene una variedad de tipos de datos como conjuntos, hashes, listas, etc.
Lo estoy usando desde el año pasado y realmente viene como un salvador cuando necesita proporcionar una solución lista para producción muy rápido y para cualquier problema relacionado con el rendimiento, ya que siempre puede usarlo para almacenar datos en caché.
fuente
Además de ser un servidor de caché, Redis es específicamente un servidor de estructura de datos. Ser un caché en la forma de un servidor de estructura de datos significa mucho, porque las estructuras de datos son fundamentales de los programas o aplicaciones . Considere que está utilizando bases de datos SQL como tecnología de almacenamiento y necesita construir una lista, un mapa hash, un conjunto de clasificación o cosas por el estilo, es un dolor en el cuello. Redis puede proporcionarle estas funcionalidades directamente de una manera muy simple, lo que simplifica enormemente el desarrollo.
Por otro lado, un servidor de estructura de datos no tiene que estar en forma de caché. Hay proyectos compatibles con Redis pero tienen motores de almacenamiento persistentes.
fuente
Redis admite estructuras de datos como cadenas, hashes, listas, conjuntos, conjuntos ordenados con consultas de rango, mapas de bits, hiperloglogs, índices geoespaciales con consultas de radio y flujos. Redis tiene replicación integrada, secuencias de comandos Lua, desalojo de LRU, transacciones y diferentes niveles de persistencia en el disco, y proporciona alta disponibilidad a través de Redis Sentinel y particionamiento automático con Redis Cluster.
implementación con python
https://beyondexperiment.com/vijayravichandran06/redis-data-structure-with-python/
fuente