¿Por qué usar redis en lugar de mysql cuando la cantidad de datos es grande?
Debido a su excelente rendimiento, Redis puede admitir cientos de miles de operaciones de lectura/escritura por segundo y también admite persistencia, implementación de clústeres, distribución, sincronización maestro-esclavo, etc. Debido a la seguridad de los datos y la coherencia de Redis en escenarios de alta concurrencia, generalmente se usa en dos escenarios:
El almacenamiento en caché puede juzgar si los datos son adecuados para el almacenamiento en caché en Redis desde varios aspectos: si serán ¿Preguntado con frecuencia? ¿Cuál es la tasa de aciertos? ¿Qué tal la operación de escritura? ¿Tamaño de datos?
A menudo utilizamos este método para descargar datos en Redis: llega la solicitud de consulta y ahora se consulta en Redis. Si no se puede consultar, podemos consultar la base de datos para obtener los datos y guardarlos en el caché, de modo que cuando llegue la misma solicitud de consulta por segunda vez, los datos se puedan obtener directamente de Redis; sin embargo, debemos prestar atención; la cuestión de la penetración de la caché.
La actualización de la caché será más complicada. Por lo general, después de modificar la base de datos, el código para operar los datos es muy simple, pero debe asegurarse de que estos dos pasos sean la misma transacción; la transacción final.
La lectura y escritura de alta velocidad son contadores comunes. Por ejemplo, el número de lecturas de un artículo no se puede actualizar en la base de datos cada vez que se lee.
Redis es muy adecuado para escenarios de alta concurrencia, como la venta flash de Double 11 y un inventario de 1000 yuanes. Durante una Venta Flash, decenas de miles de solicitudes suelen llegar al servidor en un corto período de tiempo. Si usa una base de datos, es probable que la base de datos falle en este momento, por lo que el escenario "Flash Kill" suele ser más complicado y Redis es solo uno de ellos.
En este escenario de alta concurrencia, cuando una solicitud llega al servidor, se leerá y escribirá directamente en Redis y la solicitud no accederá a la base de datos, el programa eliminará mil piezas de inventario al mismo tiempo; en el momento adecuado y luego los datos se escriben en la base de datos en lotes.
En términos generales, la introducción de Redis puede reducir la presión sobre las bases de datos MySQL (u otras) cuando sea necesario, y ambos no son sustitutos.
Continuaré compartiendo mis puntos de vista sobre el desarrollo de Java, el diseño de arquitectura, el desarrollo profesional de programadores, etc., con la esperanza de llamar la atención de todos.
Los escenarios de aplicación de Redis y MySQL son diferentes.
En términos generales, no existe el uso de Redis sin MySQL.
Porque Redis es una base de datos no relacional (NoSQL), mientras que MySQL es una base de datos relacional.
Las bases de datos similares a Redis incluyen MongoDB y Memchache (en realidad, no hay datos persistentes).
Las bases de datos relacionales más utilizadas incluyen MySQL, SQL Server y Oracle.
Primero comprendamos la diferencia entre bases de datos relacionales y bases de datos no relacionales.
1. Modo de almacenamiento La base de datos relacional está en formato de tabla, por lo que se almacena en las filas y columnas de la tabla. Son fáciles de asociar y colaborar en el almacenamiento, y fáciles de extraer datos. La base de datos Nosql es una combinación de bloques grandes. Normalmente se almacena en conjuntos de datos como documentos, pares clave-valor o estructuras gráficas.
2. Estructura de almacenamiento La base de datos relacional corresponde a datos estructurados. Las tablas de datos tienen estructuras predefinidas (definiciones de columnas) que describen la forma y el contenido de los datos. Esto es muy importante para el modelado de datos. Si bien las estructuras predefinidas aportan confiabilidad y estabilidad, es difícil modificar estos datos. La base de datos Nosql se basa en estructuras dinámicas y utiliza datos no estructurados. Dado que la base de datos Nosql es una estructura dinámica, puede adaptarse fácilmente a los cambios en los tipos y estructuras de datos.
3. Estandarización del almacenamiento El almacenamiento de datos de las bases de datos relacionales se divide en las tablas relacionales más pequeñas para evitar la duplicación y obtener una mayor utilización estandarizada del espacio reducido. Aunque la gestión es clara, la gestión de datos se vuelve un poco problemática cuando se diseña una sola operación en varias tablas. Sin embargo, los datos Nosql se almacenan en conjuntos de datos planos y los datos pueden repetirse con frecuencia. Las bases de datos individuales rara vez se separan, sino que se almacenan como un todo, lo que hace que todos los datos sean más fáciles de leer y escribir.
4. Ampliación del almacenamiento Esta puede ser la mayor diferencia entre ambos. Las bases de datos relacionales escalan verticalmente, lo que significa que si desea aumentar la potencia de procesamiento, debe utilizar una computadora más rápida. Dado que los datos se almacenan en tablas relacionales, los cuellos de botella en el rendimiento de las operaciones pueden implicar varias tablas y deben superarse mejorando el rendimiento de la computadora. Aunque hay mucho espacio para la expansión, eventualmente se alcanzará el límite superior de expansión vertical. La base de datos Nosql se expande horizontalmente y su almacenamiento se distribuye de forma natural. Puede distribuir la carga agregando más servidores de bases de datos públicas al grupo de recursos.
5. La base de datos relacional en modo de consulta opera la base de datos a través de un lenguaje de consulta estructurado (que es lo que solemos llamar SQL). SQL es muy poderoso para admitir operaciones cuajadas de bases de datos, que es un uso estándar en la industria. Sin embargo, las consultas NoSQL operan con datos en fragmentos y utilizan el lenguaje de consulta no estructurado (UnQl) no estandarizado.
El concepto de clave primaria en una tabla de base de datos relacional corresponde al ID de un documento almacenado en Nosql. Las bases de datos relacionales utilizan métodos de optimización predefinidos (como índices) para acelerar las operaciones de consulta, mientras que NoSQL es un modo de acceso a datos más simple y preciso.
6. Las bases de datos relacionales transaccionales siguen reglas ACID (atomicidad, consistencia, aislamiento, durabilidad), y las bases de datos Nosql siguen principios BASE (disponibilidad básica, estado suave, consistencia eventual). Debido a la gran coherencia de los datos en una base de datos relacional, admite bien las transacciones. Las bases de datos relacionales admiten un control detallado sobre la atomicidad de las transacciones y la facilidad para revertir las transacciones. La base de datos Nosql es uno de los CAP (consistencia, disponibilidad, tolerancia de partición), porque es difícil cumplirlos todos en un sistema distribuido basado en nodos, por lo que el soporte para transacciones no es muy bueno. Aunque también se pueden utilizar transacciones, no son lo más destacado de Nosql.
7. Rendimiento Las bases de datos relacionales pagan un precio enorme para mantener la coherencia de los datos y su rendimiento de lectura y escritura es deficiente. El rendimiento de lectura y escritura es muy pobre frente a una alta concurrencia y la eficiencia es muy baja frente a datos masivos. El formato de almacenamiento Nosql es clave-valor, que se almacena en la memoria. Es muy fácil de almacenar y tiene requisitos débiles en cuanto a la coherencia de los datos. Nosql no requiere análisis de SQL y mejora el rendimiento de lectura y escritura.
8. Método de autorización: la mayoría de las bases de datos relacionales son pagas, costosas y costosas (MySQL es de código abierto, por lo que tiene la mayoría de los escenarios de aplicación), mientras que las bases de datos Nosql suelen ser de código abierto.
Entonces, en entornos de aplicaciones reales, generalmente usamos MySQL para almacenar datos en nuestros procesos comerciales. Debido a que la relación entre estos datos es relativamente compleja, al consultar los datos de una tabla, a menudo necesitamos consultar otras relaciones. Los datos de la tabla, como consultar el pedido de un usuario, requieren al menos datos de la tabla de usuarios y de la tabla de pedidos.
Para consultar los datos de ventas de un producto, es posible que necesite una tabla de usuarios, tabla de pedidos, lista de pedidos, tabla de productos, etc.
En este escenario de uso, si usamos Redis para almacenar, es decir, en forma de KeyValue, no podrá satisfacer nuestras necesidades.
Por muy eficiente que sea Redis, no podemos usarlo.
Pero para algunas lecturas y escrituras de alta frecuencia no relacionadas, podemos usar Redis para mejorar la concurrencia de todo el sistema.
Por ejemplo, para información de inventario de productos, aunque tendremos dicho campo en MySQL, no queremos que la base de datos MySQL se lea y escriba con frecuencia, porque usarlo provocará la IO de mi tabla de productos. o la tabla de inventario sea muy alta, afectando así la eficiencia de todo el sistema.
Entonces, para dichos datos, y si existen relaciones lógicas complejas (que solo pertenecen a SKU), podemos colocarlos en Redis, realizar pedidos directamente y reducir el inventario en Redis, de modo que la concurrencia de nuestros pedidos El sexo se puede mejorar.
Personalmente creo que deberíamos levantarnos y corregirlo. Por el contrario, si la cantidad de datos es grande, no es adecuado utilizar Redis.
¿Por qué? Como redis es una base de datos en memoria, se coloca en la memoria.
Imagínese, si los 100 G de datos de su computadora están almacenados en Redis, ¡necesitará más de 100 G de memoria!
Escenarios de uso Uno de los casos de uso más obvios de Redis es usarlo como caché. Solo se guardan los datos activos o hay un caché caducado.
Por ejemplo, Facebook utiliza Memcached como caché de sesión.
En resumen, nunca había visto una gran empresa con una cantidad de datos tan grande, así que cambié mysql a redis.
Estás equivocado. En lugar de utilizar redis para reemplazar MySQL, se introduce redis para optimización.
Cada vez más equipos de proyectos en BAT adoptan la arquitectura redis+MySQL para desarrollar herramientas de plataforma.
Como dijo el interrogador, cuando hay muchos datos, la eficiencia de las consultas de MySQL se reducirá considerablemente. Por lo general, de forma predeterminada devolvemos milisegundos si el campo consultado contiene un índice. Pero en el trabajo real, una vez me encontré con una tabla con 10 campos y 180.000 datos. En ciertos escenarios, cuando debemos realizar consultas precisas basadas en campos no indexados, el tiempo de ejecución de una sola declaración SQL a veces puede alcanzar más de 2 minutos, sin mencionar si se utilizan consultas difusas (por ejemplo,
en Al principio, esperábamos resolver este problema agregando índices, pero frente a decenas de millones de datos, no nos atrevimos a agregar índices precipitadamente, porque una vez que se suspende la base de datos, todas las solicitudes de escritura de la base de datos durante el período se colocarán en el cola de espera si se pasa la solicitud /I 654381079621481365438/).
La lectura y la escritura son extremadamente rápidas. Redis es muy rápido y puede leer y escribir alrededor de 654,38+ millones de veces por segundo.
Tipos de datos enriquecidos Redis admite una variedad de tipos de datos, incluidas cadenas binarias, listas, conjuntos, conjuntos ordenados, hashes y más. Esto facilita el uso de Redis para resolver varios problemas porque sabemos qué tipos de datos se pueden usar para resolver mejor qué problemas.
Todas las operaciones de Atomic Redis son operaciones atómicas, lo que garantiza que el servidor Redis pueda recibir valores actualizados si dos clientes acceden a él simultáneamente.
Las utilidades enriquecidas admiten la replicación maestro-esclavo heterogénea. Redis admite la configuración de replicación maestro-esclavo, lo que puede lograr una replicación completa del servidor maestro.
Las anteriores son las principales ventajas de que los desarrolladores prefieran Redis. Pero tenga en cuenta que en entornos de producción reales, las empresas combinan las particularidades de Redis y MySQL para crear diferentes escenarios de aplicación. Como el almacenamiento en caché de datos activos, contadores, colas de mensajes (similares a ActiveMQ, RocketMQ y otras herramientas), operaciones de bits (procesamiento de big data), bloqueos distribuidos y mecanismos de un solo subproceso, listas más recientes (como la lista de noticias más recientes en la lista de noticias). página) y las clasificaciones esperan. , puedes ver la escena donde Redis muestra su talento. Sin embargo, para situaciones donde los requisitos de precisión de los datos son estrictos y las aplicaciones relacionales complejas, las bases de datos relacionales como MySQL siguen siendo irremplazables.
Las aplicaciones web generalmente utilizan MySQL+Redis. La aplicación web primero accede a Redis cada vez y luego accede a MySQL cuando no se pueden encontrar los datos.
Diferencia esencial 1, mysql: datos en el disco redis: datos en la memoria.
En primer lugar, debes saber que mysql se almacena en el disco y redis se almacena en la memoria. Redis se puede utilizar para almacenamiento persistente y almacenamiento en caché. En la actualidad, el almacenamiento de la mayoría de las empresas es mysql + redis, con mysql como almacenamiento principal y redis como almacenamiento auxiliar utilizado como caché para acelerar las velocidades de acceso y lectura y mejorar el rendimiento.
Diferencia de escenario de uso 1. MySQL admite consultas SQL, que pueden realizar algunas consultas y estadísticas relacionadas.
2. Redis tiene altos requisitos de memoria y es imposible colocar todos los datos. en Redis;
3. MySQL prefiere almacenar datos y Redis prefiere obtener datos rápidamente, pero al consultar relaciones de tablas complejas, Redis no es tan bueno como MySQL, por lo que los datos populares se pueden poner en redis. y mysql para almacenar datos básicos.
mysql Como base de datos relacional con almacenamiento persistente, el mecanismo operativo de mysql es relativamente débil, porque hay operaciones de E/S cada vez que se realiza una solicitud para acceder a la base de datos. Si se accede a la base de datos repetidamente y con frecuencia, en primer lugar, vincular repetidamente a la base de datos consumirá mucho tiempo, lo que resultará en una eficiencia operativa más lenta. En segundo lugar, el acceso repetido a la base de datos también hará que la base de datos se sobrecargue, por lo que el concepto de almacenamiento en caché; se derivó en este momento.
Persistencia de Redis Debido a que todos los datos de Redis se almacenan en la memoria, si no hay una configuración de persistencia, todos los datos se perderán después de que Redis se reinicie, por lo que debe habilitar la función de persistencia de Redis para guardar los datos en el disco. Los datos se pueden restaurar desde el disco cuando se reinicia Redis. Redis proporciona dos métodos de persistencia, uno es la persistencia RDB (el principio es volcar los registros de la base de datos de Reid en la memoria a la persistencia RDB en el disco) y el otro es la persistencia AOF (solo agregar archivos) (el principio es escribir el registro de operaciones de Reid en un archivo de forma adicional).
¡Redis se almacena en la memoria~!
La cantidad de datos definitivamente no es el criterio para elegir redis y mysql, porque tanto mysql como redis se pueden agrupar y expandir. Lo que los restringe es el hardware (es decir, si tiene suficiente dinero para construir miles). de ellos? Personalmente, creo que la velocidad de lectura de datos puede ser uno de los criterios de selección. Los otros dos se usan a menudo en el trabajo, porque mysql se almacena en el disco duro para almacenamiento persistente y redis se almacena en memoria caché para mejorar la eficiencia. .
Las bases de datos relacionales son esenciales porque solo las bases de datos relacionales pueden proporcionarle varios métodos de consulta. Si se consultará una serie de datos con frecuencia, utilizar redis para consultar el almacenamiento no persistente es una de las formas de resolver el problema de rendimiento de concurrencia.