Redis
 sql >> Baza danych >  >> NoSQL >> Redis

dlaczego Redis jest jednowątkowy (sterowany zdarzeniami)

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak używać sadd z wieloma elementami w Redis za pomocą Pythonowego API?

  2. Jak sprawdzić zero / null w Redis' Lua cjson?

  3. StackExchange Redis ChannelPrefix nie określa zakresu kluczy

  4. Różnica między StackExchange.Redis i ServiceStack.Redis

  5. Redis Python - jak usunąć wszystkie klucze zgodnie z określonym wzorcem w pythonie, bez iterowania w pythonie