sql >> Base de Datos >  >> NoSQL >> Redis

Rendimiento de Redis en una CPU multinúcleo

Revisé el sitio web de redis y descubrí que redis no está diseñado para una CPU de varios núcleos. Mi pregunta es, ¿Por qué es así?

Es una decisión de diseño.

Redis es de subproceso único con epoll/kqueue y escala indefinidamente en términos de simultaneidad de E/S. [email protected] (creador de Redis)

Una razón para elegir un enfoque basado en eventos es que la sincronización entre subprocesos tiene un costo tanto en el software (complejidad del código) como en el nivel de hardware (cambio de contexto). Agregue a esto que el cuello de botella de Redis suele ser la red , no la CPU. Por otro lado, una arquitectura de subproceso único tiene sus propios beneficios (por ejemplo, la garantía de atomicidad).

Por lo tanto, los bucles de eventos parecen un buen diseño para un eficiente &escalable sistema como Redis.

Además, en caso afirmativo, ¿cómo podemos utilizar el 100 % de los recursos de la CPU con redis en una CPU de varios núcleos?

El enfoque de Redis para escalar en múltiples núcleos es fragmentación , principalmente junto con Twemproxy.

Sin embargo, si por alguna razón aún desea utilizar un enfoque de subprocesos múltiples, eche un vistazo a Thredis pero asegúrese de comprender las implicaciones de lo que hizo su autor (no puede usarlo como maestro de replicación, por ejemplo).