sql >> Database >  >> NoSQL >> Redis

Redis-prestaties op een multi-core CPU

Ik heb de redis-website bekeken en ontdekt dat de redis niet is ontworpen voor een multi-core CPU. Mijn vraag is:waarom is dat zo?

Het is een ontwerpbeslissing.

Redis is single-threaded met epoll/kqueue en schaalt oneindig in termen van I/O-gelijktijdigheid. [email protected] (maker van Redis)

Een reden om te kiezen voor een gebeurtenisgestuurde aanpak is dat synchronisatie tussen threads kost geld in zowel de software (codecomplexiteit) als het hardwareniveau (contextomschakeling). Voeg daarbij dat het knelpunt van Redis meestal het netwerk is , niet de CPU. Aan de andere kant heeft een single-threaded architectuur zijn eigen voordelen (bijvoorbeeld de garantie van atomiciteit).

Daarom lijken event loops een goed ontwerp voor een efficiënte &schaalbaar systeem zoals Redis.

En zo ja, hoe kunnen we 100% gebruik maken van CPU-bronnen met redis op multi-core CPU's.

De Redis-benadering om over meerdere kernen te schalen is sharding , meestal samen met Twemproxy.

Als je echter om de een of andere reden toch een multi-threaded benadering wilt gebruiken, kijk dan eens naar Thredis, maar zorg ervoor dat je de implicaties begrijpt van wat de auteur deed (je kunt het bijvoorbeeld niet als replicatiemaster gebruiken).



  1. mongodb zoekt zowel met AND als OR

  2. Ember-gegevens hiërarchie op meerdere niveaus met ingesloten altijd

  3. Redis gebruiken als cache voor een mysql-database

  4. Mongodb sorteer binnenarray