Redis tiene varios malentendidos.

  

Hace unos días, Weibo tuvo un gran fallo en el sistema. Muchos amigos técnicos estaban preocupados. La razón no está más allá del servicio de diseño e implementación de Internet de James Hamilton (1). El alcance general del resumen, la primera experiencia de James "Diseño para el fracaso" es clave para el éxito de todas las arquitecturas de Internet. La teoría de la ingeniería del sistema de Internet es en realidad muy simple. El contenido del artículo de James es casi imposible de describir, pero se comparte mucha experiencia práctica. La comprensión y ejecución de estas experiencias de cada compañía determinan el fracaso de la composición.

Después del tema, recientemente estudié Redis. El año pasado hice una prueba de rendimiento de MemcacheDB, Tokyo Tyrant, Redis. Hasta ahora, este resultado de referencia sigue siendo válido. En el último año, experimentamos la tentación de una gran cantidad de deslumbrantes productos de almacenamiento de valor clave, desde el desvanecimiento de Cassandra (Twitter hace una pausa en el uso principal del negocio) hasta el aumento de HBase (el nuevo negocio de buzones de Facebook utiliza HBase (2)), cuando regresamos. Mirando a Redis, encontré que este programa con más de 10,000 líneas de código fuente está lleno de características mágicas e inexploradas. El rendimiento de Redis es asombroso. Se estima que los subproductos de los diez sitios web principales en China cumplen con los requisitos de almacenamiento y caché con un solo Redis. Además de la impresión de rendimiento, la industria generalmente tiene un cierto malentendido de Redis. Este artículo presenta algunos puntos para discusión.
1. ¿Qué es Redis?

El resultado de este problema afecta la forma en que usamos Redis. Si cree que Redis es un almacén de valores clave, puede usarlo en lugar de MySQL, si cree que es un caché persistente, puede que solo guarde algunos datos temporales a los que se accede con frecuencia. Redis es la abreviatura de REmote DIctionary Server. El subtítulo de Redis en el sitio web oficial es una base de datos de valores clave persistentes con una interfaz de red incorporada escrita en ANSI-C para sistemas Posix. Esta definición está sesgada hacia el almacén de valores clave. También hay algunas opiniones de que Redis es una base de datos de memoria porque su alto rendimiento se basa en las operaciones de la memoria. Otros piensan que Redis es un servidor de estructura de datos porque Redis admite funciones de datos complejas como Lista, Conjunto, etc. Las diferentes interpretaciones del rol de Redis determinan cómo se usa Redis.

Los datos de Internet actualmente utilizan dos métodos para almacenar, bases de datos relacionales o valores clave. Sin embargo, estos servicios de Internet no pertenecen a estos dos tipos de datos, como la relación de los usuarios en la plataforma social. Es una lista. Si desea utilizar el almacenamiento de bases de datos relacionales, debe convertirlo en un registro de varias líneas. Este formulario existe. Una gran cantidad de datos redundantes, cada línea necesita almacenar alguna información duplicada. Si utiliza el valor clave para almacenar, es complicado modificar y eliminar. Debe leer y escribir todos los datos. Redis ha diseñado varios tipos de datos en la memoria, lo que permite a la empresa acceder a estas estructuras de datos a alta velocidad, y no necesita preocuparse por el almacenamiento persistente. Resuelve el problema de que los dos primeros tipos de almacenamiento deben tomar algunos desvíos.
2. Redis no puede ser más rápido que Memcache

Muchos desarrolladores creen que Redis no puede ser más rápido que Memcached. Memcached está completamente basado en memoria, y Redis tiene características de almacenamiento persistentes, incluso si es asíncrono, Redis no. Puede ser más rápido que Memcached. Pero los resultados de las pruebas son básicamente que Redis tiene una ventaja absoluta. He estado pensando en esto durante mucho tiempo, y pienso en las razones de esto.

  • Libevent se diferencia de Memcached en que Redis no elige libevent. Libevent tiene un gran código para satisfacer la versatilidad (actualmente el código Redis es menos de 1/3 del libevent) y sacrifica mucho rendimiento en una plataforma en particular. Redis implementó su propio bucle de eventos epoll (4) con dos archivos en libevent. Muchos desarrolladores en la industria también sugirieron que Redis use otro alto rendimiento de libevent en lugar de libev, pero el autor todavía insiste en que Redis debe ser pequeño y dependiente. Un detalle impresionante es que no necesita ejecutar ./configure antes de compilar Redis.
  • problema CAS. CAS es una forma conveniente de evitar que la competencia modifique los recursos en Memcached. La implementación de CAS necesita establecer un token de cas oculto para cada clave de caché, cas es un número de versión bastante valioso, cada vez que el conjunto necesitará incrementar el token, lo que conlleva una doble sobrecarga de CPU y memoria, aunque estos gastos son pequeños, pero para el caché 10G + independiente Y después de QPS, decenas de miles de estos costos traerán algunas diferencias sutiles de rendimiento entre los dos lados (5).
  • Copyright © Conocimiento de Windows All Rights Reserved