TL;DR :Pojedynczy wątek sprawia, że redis jest prostszy, a redis nadal jest związany z IO.
Pamięć to I/O. Redis nadal jest związany z operacjami we/wy. Gdy redis jest pod dużym obciążeniem i osiąga maksymalną liczbę żądań na sekundę, zwykle jest pozbawiony przepustowości sieci lub przepustowości pamięci i zwykle nie wykorzystuje dużej części procesora. Istnieją pewne polecenia, dla których nie jest to prawdą, ale w większości przypadków redis będzie mocno powiązany we/wy przez sieć lub pamięć.
O ile szybkość pamięci i sieci nie wzrośnie nagle o rząd wielkości, bycie jednowątkowym zwykle nie stanowi problemu. Jeśli potrzebujesz skalować poza jeden lub kilka wątków (np. konfiguracja master<->slave<->slave), już patrzysz na klaster Redis. W takim przypadku możesz skonfigurować instancję klastra na rdzeń procesora, jeśli w jakiś sposób brakuje Ci procesora i chcesz zmaksymalizować liczbę wątków.
Nie jestem za bardzo zaznajomiony z źródłami redis lub elementami wewnętrznymi, ale widzę, jak użycie pojedynczego wątku ułatwia implementację bezblokujących akcji atomowych. Wątki uczyniłyby to bardziej złożonym i nie wydają się oferować dużych korzyści, ponieważ redis nie jest związany z procesorem. Wdrożenie współbieżności na poziomie wyższym niż instancja redis wydaje się dobrym rozwiązaniem i w tym pomagają Redis Sentinel i Redis Cluster.
Co dzieje się z innymi żądaniami, gdy redis zajmuje dużo czasu?
Te inne żądania zostaną zablokowane, podczas gdy redis zakończy długie żądanie. W razie potrzeby możesz to przetestować za pomocą client-pause
polecenie.