Jag har tittat på redis-webbplatsen och upptäckt att redis inte är designad för en flerkärnig CPU. Min fråga är, varför är det så?
Det är ett designbeslut.
Redis är enkeltrådad med epoll/kqueue och skalas på obestämd tid när det gäller I/O-samtidighet. [email protected] (skapare av Redis)
En anledning till att välja ett händelsestyrt tillvägagångssätt är att synkronisering mellan trådar kommer till en kostnad i både mjukvaran (kodkomplexitet) och hårdvarunivån (kontextväxling). Lägg till detta att flaskhalsen för Redis vanligtvis är nätverket , inte CPU. Å andra sidan har en entrådig arkitektur sina egna fördelar (till exempel garantin för atomicitet).
Därför verkar händelseloopar vara en bra design för en effektiv &skalbar system som Redis.
Också, om ja, hur kan vi göra 100 % utnyttjande av CPU-resurser med återförs på en multi-core CPU.
Redis-metoden för att skala över flera kärnor är sharding , mestadels tillsammans med Twemproxy.
Men om du av någon anledning fortfarande vill använda ett flertrådigt tillvägagångssätt, ta en titt på Thredis men se till att du förstår konsekvenserna av vad dess författare gjorde (du kan till exempel inte använda den som en replikeringsmaster).