Sobre un Redis (single version)

proceso de desarrollo

1.0 etapa

archivos comunes se almacenan en dos formas: en disco, memoria.
Se relaciona con dos preguntas comunes: abordar el ancho de banda.

abordar milisegundos (ms) a nivel de disco, el ancho de banda xx G
direccionamiento de memoria en nanosegundos (ns) nivel de ancho de banda: un gran
disco y memoria, en términos de direccionamiento, 10w veces más lento

Disco tiene una pista sector. Un sector de 512 bytes, la capacidad es pequeña, plantea un problema, si el archivo es relativamente grande cuando la necesidad de mantener el acceso al sector, en constante direccionamiento, el archivo de índice correspondiente será muy grande.

almacenamiento de la memoria, los datos no persistentes.

4k alineación: el sistema operativo, independientemente de lo grande que se lee el archivo, el primero de E / S, un tamaño mínimo de 4k. Se puede ajustar para que sea más grande que 4k.

2.0 etapa

Base de datos relacional aparece:
base de datos de unidad más pequeña de almacenamiento de datos denominada página (oráculo de Bloque), por lo general 8K, 4k conjunto a un múltiplo entero de, el sistema operativo con el fin de satisfacer un propósito / tamaño I O.
En la base de datos, los archivos de datos pueden ser, vistos a Split desde el número de página de 0-N.
Índice: Datos después de la página de datos normal, y luego abrir un nuevo espacio, donde la página de datos de la información de almacenamiento de información de cada página correspondiente al campo de índice, y su índice asociado de los datos normales.

Aquí Insertar imagen Descripción
Cuando una consulta de la información del índice B / árbol, un índice de un golpe, como PÁG.1, puede aprovechar los datos PAGE2 metadatos se encuentra, cargado en la página 2 de datos de memoria.

Cuando la cantidad de datos es muy grande, el rendimiento será donado eliminación de datos reducido rendimiento de las consultas, aunque sólo unas pocas consultas, rendimiento de las consultas no disminuye, obviamente, pero si los altos consultas simultáneas, restringidos a leer de E / S capacidad, hará que una gran cantidad de página leída línea de bloqueo, el rendimiento se reducirá obvia. Esperamos ser capaces de acelerar más rápido.

3.0 etapa

Cache: memcached, Redis

Redis

Esquema:

Aquí Insertar imagen Descripción
Después de que el cliente establece una conexión con Redis, por epoll proceso de multiplexación para lograr un solo alto rendimiento,

Seguridad binaria

Aquí Insertar imagen Descripción
Almacenamiento de un mismo valor: cuando se utiliza el shell cuando, los Redis 3 bytes se almacenan UTF-8, cuando la cáscara codifica en GBK, de nuevo almacenamiento "en", los Redis almacenan en 2 bytes.
Para mayor seguridad binaria Redis para leer los datos del flujo de bytes, en lugar de flujo de caracteres.

negocios

Aquí Insertar imagen Descripción
Como se muestra, client2 cliente1 y están conectados a una instancia Redis. cliente1 y CLIENTE2 ambas operaciones transaccionales, actualización de la clave cliente1, la eliminación de clave client2 clave de consulta de nuevo.
Todos sabemos que Redis para este proceso de negocio, un solo proceso, y que ahora hay dos transacciones, Redis es cómo lograrlo?
Una transacción de principio a la ejecución, no son los tres pasos siguientes: 1. Comenzar una transacción, 2 comandos en el equipo, 3 para realizar una transacción ...
Redis recibido desde la primera transacción del comando MULTI abierta, cada transacción sería mantener un colchón de comandos de cola, ejecute el comando hasta el final Ejecutivo:
Aquí Insertar imagen Descripción
por lo que dos transacciones, la orden de ejecución final, para ver cuál llega primero comando exec transacción.
notas:Redis transacción, y base de datos relacional transaccional es un poco diferente. Es la base de datos de transacción atómica, si cualquiera de una pluralidad de fallos de comando, se revertirán. Redis transacción, cuándo realizar una fila, si se produce un error, el comando se ha ejecutado no se deshace, mientras que los comandos posteriores se siguen ejecutando hacia abajo, por lo que la transacción no es Redis operaciones atómicas pueden entenderse como el paquete de un montón de comandos ejecutados.

expiración eliminado

Hay dos principal mecanismo de eliminación expirado: pasivos, activos

  • Pasiva (perezoso): Cuando un cliente inicia una solicitud de clave de, Redis detectará si la corriente esta clave ha expirado. Esto tiene un obvias desventajas, si no décadas, una clave de acceso de cliente, a continuación, esta clave se mantendrá durante décadas sin ser limpiado.
  • Activo: Redis realiza 10 veces por segundo:
    . Tecla A 20 para detectar al azar de caducidad
    b tecla de borrar ha expirado.
    C 20 clave expiró si es mayor que 25%, el proceso anterior se realiza repetidamente.
  • AOF expiró el manejo de archivos
    con el fin de obtener el comportamiento correcto sin sacrificar la consistencia, cuando una tecla expira, comando DEL AOF está escrito enviado ungüentos

resistencia de

Hay dos maneras Redis persistencia:

  • RDB (cantidad total de datos)
  • AOF de (datos incremento)
RDB:

Bien entendido, RDB manera, es decir, todos los datos en la caché actual Redis, todos escriben en el disco. La pregunta es, ¿cómo se escribe?
La introducción de una pregunta: Supongamos que el nodo hora de la mañana 10: 00, Redis ha grabado a = 3, b = 4, y ahora que poner esta demanda es ser persistente.

  • Un programa: hilo principal Redis bloqueado, rechazó toda respuesta externa, etc. Una vez que los datos se escriben en el disco, y luego recibe una solicitud externa.
  • Opción dos: Redis no está bloqueando la línea principal, siguen respondiendo a las peticiones de lectura / escritura externo para abrir un sub-hilo es responsable de escribir los datos en el disco

A partir de la velocidad de respuesta de respuesta y el rendimiento, el segundo método es sin duda una prioridad, pero si se elige la opción II, traerá un problema si las necesidades de rosca niño a ser escritos a 30min de disco, mientras que el hilo principal de esto dentro de 30 minutos, será = clave una, y la clave de datos = b, respectivamente, 5 veces, 8 veces la actualización, a continuación, que dentro de 30 minutos, realmente comenzó cuando el tiempo de persistencia hilo hijo, esta vez para obtener el valor, que puede ser 5/8 cualquier actualización del valor anterior. Es decir: la tecla = un valor pueden ser almacenados en la segunda modificación es el resultado del tiempo 10: 17, clave = b se almacena en el resultado de la séptima modificación, el tiempo de 10:26. archivo de datos RDB en este momento no es el momento de 10:00.

Así Redis RDB es cómo lograrlo?
En primer lugar necesidad de introducir algunos conceptos:

  • dirección de memoria virtual
  • dirección de memoria física
  • tenedor
  • Copiar en escrito

Todos sabemos que cada hilo tiene su propio espacio de hilo para sistemas Linux / Uinx, por ejemplo, comando de exportación que permite que un proceso hijo los datos de proceso de los padres visible, que el hilo hijo para mantener las referencias a objetos de los padres en cada hilo espacio, cada hilo tiene sus propias direcciones de memoria virtual se asignan a direcciones de memoria física por el sistema operativo dirección:
Aquí Insertar imagen Descripción
cuando el hilo hijo por el tenedor Redis salida, que tiene una copia de seguridad completa de los datos contenidos en un determinado período de tiempo, el proceso principal. Por supuesto que tiene que pedir, el hilo principal sigue respondiendo al cliente leer y solicitudes de escritura, si una copia de los datos, el disco no se ha escrito antes, el hilo principal será el de datos se ha modificado, y que el hilo hijo a conseguir a través de la memoria mapeada valor, si se trata de datos después de la revisión? Esta vez se copia en escritura a mano balsas. Como su nombre indica, escribir, copiar, es decir, cuando la necesidad de modificar los datos, se copian los datos. La figura anterior ejemplo, cuando el hilo principal en un momento, necesita memoria física 10 en datos de 8, la relación de mapeado dirección final como sigue:
Aquí Insertar imagen Descripción
correspondiente al comando toma dos Redis:

  • Guardar, el bloqueo, lo que corresponde a un programa
  • bgsave, no bloqueante, que corresponden a los dos métodos

Mientras tanto, el elemento de configuración redis.conf guardar, en realidad corresponde a bgsave comando tiene dos parámetros: el intervalo de tiempo, cambiar el número de filas
Aquí Insertar imagen Descripción

AOF

Redis escribirá el archivo de registro, sólo-añadir, se añadieron los registros de parada.

Imagine la siguiente pregunta: ¿
hay ahora una Ming Xiao, muy aburrido, en el próximo año, para mantener la implementación de Redis en tales operaciones, el nuevo key1, key1 de eliminación, a continuación, añadir key1, a continuación, eliminar el key1, por lo en repetidas ocasiones. bien, hay un problema ahora, un año después, el archivo de registro será la cantidad? Seguimiento de este archivo en cada instrucción se han recuperado para la recuperación de datos, y en última instancia, la restauración se ha completado, el tiempo que tendra un tiempo?

En el ejemplo anterior se puede observar que la persistencia de registro, ventajas muy distintas y desventajas:
Ventajas: el máximo para retener cada cambio de datos, integridad de datos buenos
desventajas: los archivos mantienen append, hará que el archivo expansión sin parar, posterior eficiencia de recuperación es muy baja.

Redis cómo resolver este problema?
Obviamente, tenemos que resolver dos problemas: 1 archivo de registro es demasiado grande, 2 instrucción vanas repeticiones, como el ejemplo anterior, un año, los datos reales, o añadir una clave, o lo que no son datos.

Redis AOF reescritura:

Existente asumido la siguiente manera:
1. Ajuste key1 XX
2.Set clave2 XX
3.Set key3 XX
...
10.Ajuste key10 XX

10 operaciones, 10 a los registros Redis, entonces la presencia de 10 instrucciones AOF archivo intermedio, entonces los datos 10 está presente en Redis.
Cuando se realiza la sobreescritura AOF, antes de leer los datos directamente en Redis, es decir, la última instrucción: Conjunto key1 xx xx clave2 key3xx ... key10 xx, 10 eventualmente se funden en una sola instrucción.

implementación:
  • realizado manualmente
bgrewriteaof
  • ejecución automática
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percentage

Pregunta:
Si la instrucción actual reescrita para la ejecución de rosca en el niño tenedor, entonces, si el hilo hijo ejecutado durante la reescritura, el padre enhebrar una pieza de información será cambiado, entonces el hilo hijo después de la reescritura se ha completado, alteraciones a estos datos de instrucciones no se registrará en el archivo nuevo AOF.
Para resolver el problema de estado de datos inconsistentes, después de que el tenedor de un hilo matriz hilo hijo, mantiene un búfer de comandos, en el ínterin, el hilo padre continuará respondiendo a las peticiones externas, mientras que esto va a registrar la hora en la memoria intermedia, cuando después de volver a escribir el hilo hijo al completo, dentro de la matriz de hilo y luego búfer de comandos, archivos anexados en el nuevo AOF.

AOF Frecuencia registro:

  • no: OS utilizando tampones de lectura y escritura, cuando se llena el búfer de datos, el archivo de datos anexados en el AOF
  • segundos (por defecto): escrito por segundo
  • siempre: cada vez que las modificaciones se escriben AOF
RDB, AOF escritura mixta

Redis versión 4.0, el modo de apoyo RDB + AOF swizzling, es decir, algunos de los viejos datos guardados en forma de RDB, entonces las instrucciones subsiguientes en la forma de instrucciones por escrito AOF.

Cuando se ejecuta el comando de reescritura AOF, los datos actuales se guardará como RDB, un comando de escritura en la zona de amortiguación durante la última AOF buffer de escritura. Tenga en cuenta que se genera la mezcla final para escribir un archivo AOF, que, RDB es la primera mitad de los datos binarios a "Redis" carácter principio, es la segunda mitad del archivo en la instrucción posterior de amortiguación. Una vez completada la reescritura, después de escribir un comando en el AOF continúa archivo de datos anexados.

Ventajas: RDB para recuperar datos de forma rápida, en grandes cantidades de datos de forma rápida restaurados sobre la base de sólo los datos incrementales es menos datos para modificar la instrucción, en gran medida mejorar la eficiencia de recuperación de datos.

Publicado cuatro artículos originales · ganado elogios 1 · visitas 152

Supongo que te gusta

Origin blog.csdn.net/weixin_36510400/article/details/105023521
Recomendado
Clasificación