La Red de Conocimientos Pedagógicos - Currículum vitae - Preguntas de la entrevista en PHP La diferencia entre Memcache y Redis

Preguntas de la entrevista en PHP La diferencia entre Memcache y Redis

La diferencia entre Redis y Memcached

Problemas encontrados por la arquitectura tradicional MySQL+ Memcached

De hecho, MySQL es adecuado para el almacenamiento masivo de datos. Muchas empresas utilizan esta arquitectura para cargar datos importantes en la caché a través de Memcached para un acceso más rápido. Sin embargo, a medida que los datos comerciales y las visitas continúan aumentando, nos hemos encontrado con muchos problemas:

1. MySQL debe desensamblarse continuamente y Memcached también debe expandirse continuamente. Los trabajos de ampliación y mantenimiento consumen mucho tiempo de desarrollo.

Consistencia de datos entre 2.2. Base de datos Memcached y MySQL.

3. La tasa de aciertos de datos de Memcached es baja o baja, y una gran cantidad de accesos penetran directamente en la base de datos, lo que MySQL no puede admitir.

4. Problema de sincronización de caché de sala entre máquinas.

Las flores NoSQL están floreciendo, ¿cómo elegir?

En los últimos años, han aparecido en la industria una variedad de productos NoSQL. Cómo utilizar estos productos correctamente y aprovechar al máximo sus ventajas es una cuestión que debemos estudiar y pensar en profundidad.

El problema, en última instancia, es que lo más importante es comprender el posicionamiento de estos productos y comprender las ventajas y desventajas de cada producto, para maximizar las fortalezas y evitar debilidades en las aplicaciones prácticas. . En términos generales, estos NoSQL se utilizan principalmente para resolver.

Resuelva los siguientes problemas

1. La capacidad de almacenamiento de datos es pequeña y la velocidad de acceso de lectura y escritura es rápida. Este tipo de producto garantiza un acceso de alta velocidad a todos los datos internos y, al mismo tiempo, proporciona la función de aterrizaje de datos. Este es en realidad el escenario de aplicación más importante de Redis.

2. Almacenamiento masivo de datos, compatibilidad con sistemas distribuidos, garantía de coherencia de los datos y cómoda adición/eliminación de nodos del clúster.

3. Las opiniones más representativas a este respecto son las expresadas en dos artículos de Dynamo y Big Table. El primero es un diseño completamente centralizado que transmite información del clúster entre nodos a través de chismes para garantizar la máxima coherencia de los datos. Este último es un diseño de solución centralizada que garantiza una fuerte coherencia a través de servicios de bloqueo distribuidos. Los datos primero se escriben en la memoria y se rehacen registros, y luego la compatibilidad se fusiona con el disco periódicamente para optimizar las escrituras aleatorias en escrituras secuenciales para mejorar el rendimiento de la escritura.

4. Modo libre, fragmentación automática, etc. Por ejemplo, algunas bases de datos de documentos comunes admiten esquemas, almacenan datos directamente en formato json y admiten la fragmentación automática y otras funciones, como mongodb.

Ante estos diferentes tipos de productos NoSQL, debemos elegir el producto más adecuado según nuestros escenarios de negocio.

Redis es adecuado para escenarios, ¿cómo usarlo correctamente?

Como se analizó anteriormente, Redis es el más adecuado para todos los escenarios de almacenamiento de datos. Aunque Redis también proporciona funciones de persistencia, en realidad es más un disco:

La función de respaldo es muy diferente de la persistencia en el sentido tradicional, por lo que es posible que tenga preguntas. Parece que Redis se parece más a una versión mejorada de Memcached, entonces, ¿cuándo debería usarse?

Memcached, ¿cuándo usar Redis?

Si simplemente comparas las diferencias entre Redis y Memcached, la mayoría de la gente obtendrá las siguientes opiniones:

1 Redis no solo admite datos k/v simples, sino que también proporciona listas, conjuntos y zset, almacenamiento de estructuras de datos como hash.

2 Redis admite la copia de seguridad de datos, es decir, la copia de seguridad de datos en modo maestro-esclavo.

3 Redis admite la persistencia de datos. Puede guardar los datos en la memoria en el disco y cargarlos nuevamente al reiniciar.

Dejando de lado estos, podemos profundizar en la estructura interna de Redis para observar las diferencias más esenciales y comprender el diseño de Redis.

Existencia

En Redis no todos los datos se almacenan en la memoria. Ésta es la mayor diferencia en comparación con Memcached.

Redis solo almacenará en caché toda la información clave. Si Redis descubre que el uso de memoria excede un cierto umbral, activará una operación de intercambio basada en "swappability="

<. p>Medidor de edad* Registro (tamaño de memoria)

Descubra qué claves corresponden a los valores que deben intercambiarse en el disco. Luego, los valores correspondientes a estas claves se guardan en el disco y se borran. en la memoria. Esta característica permite a Redis

Retener datos que excedan el tamaño de la memoria de la máquina. Por supuesto, la propia memoria de la máquina debe poder acomodar todas las claves al mismo tiempo. se intercambiará porque Redis almacenará la memoria.

Cuando los datos del intercambio se colocan en el disco, el subproceso principal que proporciona el servicio y el subproceso que realiza la operación de intercambio * * * utilizarán esta parte de la memoria, por lo que si es necesario actualizar los datos de intercambio, Redis lo bloqueará.

La operación no se puede modificar hasta que el subproceso secundario complete la operación de intercambio. antes y después de usar el modelo de memoria específico de Redis:

Apagado de la máquina virtual: 300 000 claves, valor de 4096 bytes: 1,3 G usados

VM encendida: 300 000 claves, valor de 4096 bytes: 73 M usado

VM apagada: 1 millón de claves, 256 palabras Valor de sección: 430,12 M usados

VM encendida: 1 millón de claves, 256 bytes Valor: 160,09 M usados

VM activada: 1 millón de claves, valor máximo posible Grande, todavía: 160,09 millones en uso

Cuando...

Al leer datos de Redis, si el valor correspondiente a la clave leída no está en la memoria, Redis Los datos correspondientes deben cargarse desde el archivo de intercambio y luego devolverse al solicitante.

Hay un problema con el grupo de subprocesos de E/S. De forma predeterminada, Redis se bloqueará. es decir, después de cargar todo, no responderá antes de intercambiar archivos. Esta estrategia se implementa en una pequeña cantidad de clientes.

Pero si Redis se aplica a aplicaciones de sitios web grandes, obviamente no podrá cumplir. situaciones de gran concurrencia. Redis ejecuta el subproceso de E/S que configuramos.

El tamaño del grupo requiere solicitudes de lectura simultáneas para cargar los datos correspondientes del archivo de intercambio y se reduce el tiempo de bloqueo. >

Si desea procesar datos masivos para hacer un buen uso de Redis en un entorno, creo que es esencial comprender el diseño de la memoria y el bloqueo de Redis.

Puntos de conocimiento adicionales:

p>

Comparación entre memcached y redis

1 modelo de red IO

Memcached es un modelo de red de multiplexación de IO sin bloqueo y multiproceso, que se divide en una red principal de monitoreo. subproceso y un subproceso de trabajo. El subproceso de monitoreo monitorea las conexiones de red y las acepta.

Los word pipes se pasan a subprocesos de trabajo para leer y escribir IO. La capa de red utiliza la biblioteca de eventos encapsulada por libevent. El modelo de subprocesos múltiples puede desempeñar el papel de múltiples núcleos, pero introduce caché.

Problemas de coherencia y bloqueo, como las estadísticas más utilizadas de Memcached.

Comando, todas las operaciones reales de Memcached deben bloquear esta variable global y contarla, lo que genera una pérdida de rendimiento.

(Modelo IO de red Memcached)

Redis utiliza un modelo de reutilización de IO de un solo subproceso para encapsular un marco de procesamiento de eventos AeEvent simple, que implementa principalmente epoll, kqueue y select.

Para operaciones de IO únicamente, un solo subproceso puede maximizar la ventaja de velocidad, pero Redis también proporciona algunas funciones informáticas simples, como clasificación y agregación. Para estas operaciones, el modelo de un solo subproceso es verdadero.

Afectará seriamente el rendimiento general y toda la programación de IO se bloqueará durante el cálculo de la CPU.

2. Gestión de la memoria

Memcached utiliza un grupo de memoria preasignado y utiliza bloques y fragmentos de diferentes tamaños para administrar la memoria. El elemento selecciona el almacenamiento de fragmentos adecuado según el tamaño.

El método de ahorro de grupo puede ahorrar el costo de solicitar/liberar memoria y reducir la generación de fragmentos de memoria, pero también provocará un cierto grado de desperdicio de espacio y también se puede utilizar cuando hay Todavía hay mucho espacio en la memoria. Los datos nuevos

se pueden eliminar. Consulte el artículo de Timyang:/memcached/. Memcached

Existen muchas implementaciones de software cliente, incluidas C/C++, PHP, Java, Python, Ruby, Perl, Erlang,

Lua, etc. En la actualidad, Memcached es muy utilizado, además de LiveJournal, Wikipedia, Flickr, Twitter, Youtube y WordPress.

En el sistema de ventanas, la instalación de Memcached es muy conveniente. Simplemente descargue el software ejecutable desde la dirección proporcionada anteriormente y luego ejecute Memcached .exe–d.

Instalar para completar la instalación. En sistemas como Linux, primero debe instalar libevent y luego obtener el código fuente de make & amp make

Simplemente instálelo. De forma predeterminada, el iniciador del servidor de Memcached se instala en el directorio /usr/local/bin. Al iniciar Memcached, podemos

configurar diferentes parámetros de inicio.

1.1 Configuración de la memoria caché

Los parámetros clave deben configurarse cuando se inicia el servidor Memcached. Echemos un vistazo a qué parámetros clave deben configurarse al inicio y sus funciones.

1)-p<num>El puerto de escucha TCP de Memcached está configurado como 11211 de forma predeterminada;

2)-U<num>El puerto de escucha UDP de Memcached está configurado como 11211 Cuando sea 0, gire; desactivado la escucha UDP

3)-s <Archivo>Ruta del socket Unix para la escucha de Memcached;

4)-a <mask>De forma predeterminada, la máscara octal utilizada para acceder a los sockets UNIX está configurada a 0700;

5)-l <addr>La dirección IP del servidor monitoreado, predeterminada Para todas las tarjetas de red

6)-d Iniciar un demonio para el servidor Memcached <; /p>

7)-r Tamaño máximo del archivo principal;

8)-u <Nombre de usuario>El usuario que ejecuta Memcached. Si actualmente es root, debe usar este parámetro para especificar el usuario;

9)-m <num>La cantidad de memoria asignada a Memcached, La unidad es MB.

10) -M indica a Memcached que devuelva un error cuando se queda sin memoria en lugar de usar el algoritmo LRU para eliminar registros de datos

11) -c <num>Número máximo de conexiones simultáneas; , la configuración predeterminada es 1024;

12) -v -vv -vvv establece el nivel de detalle de los mensajes impresos por el servidor, donde -v solo imprime información de error y advertencia, y -vv también imprime error y información de advertencia en base a -v Imprime comandos y respuestas del cliente. -vvv también imprime información de transición del estado de la memoria en base a -vv;

13) -f <factor> se utiliza para configurar el valor. factor de incremento del tamaño del bloque

14)-n<bytes>Tamaño mínimo del bloque, la configuración predeterminada es 48 bytes;

15)-t<num>De forma predeterminada, el número de subprocesos utilizados; por el servidor Memcached es 4;

16)-L Intente utilizar páginas de memoria grandes

17)-R El número máximo de solicitudes para cada evento, la configuración predeterminada es 20; .

18)-C desactiva CAS, el modo CAS traerá 8 bytes de redundancia;

2. Introducción a Redis

Redis es una clave de código abierto para almacenar valores. sistema.

Al igual que Memcached, Redis almacena la mayoría de los datos en la memoria. Los tipos de datos admitidos incluyen: palabra.

Cadenas, tablas hash, listas enlazadas, conjuntos, conjuntos ordenados y operaciones relacionadas basadas en estos tipos de datos. Redis está desarrollado en lenguaje C y se usa ampliamente en Linux, BSD y Solaris.

Los sistemas POSIX se pueden utilizar sin dependencias externas. Redis admite múltiples lenguajes de cliente, como C, C#, C++, Object-C, PHP,

Python, Java, Perl, Lua, Erlang, etc. Permita que los clientes disponibles accedan al servidor Redis. En la actualidad, Redis se ha utilizado ampliamente, como Sina y Yitao en China.

En países extranjeros, Flickr y Github utilizan el servicio de caché de Redis.

La instalación de Redis es muy conveniente. Simplemente obtenga el código fuente de http://redis.io/download y luego haga y haga

instálelo. De forma predeterminada, el programa de inicio del servidor Redis y el programa cliente se instalan en el directorio /usr/local/bin. Al iniciar el servidor Redis,

debemos especificar un archivo de configuración para él. De forma predeterminada, el archivo de configuración se encuentra en el directorio fuente de Redis y se denomina redis.conf.