sql >> Databáze >  >> NoSQL >> Redis

proč je Redis jednovláknový (řízený událostmi)

TL;DR :Jedno vlákno zjednodušuje redis a redis je stále vázáno IO.

Paměť je I/O. Redis je stále I/O vázán. Když je redis pod velkým zatížením a dosahuje maximálního počtu požadavků za sekundu, obvykle má nedostatek šířky pásma sítě nebo paměti a obvykle nevyužívá velkou část CPU. Existují určité příkazy, pro které to nebude pravda, ale ve většině případů použití bude redis silně vázán na I/O síť nebo paměť.

Pokud se rychlost paměti a sítě náhle nezrychlí o řády, není obvykle problém s jedním vláknem. Pokud potřebujete škálovat nad rámec jednoho nebo několika vláken (např.:master<->slave<->slave setup), již se díváte na Redis Cluster. V takovém případě můžete nastavit instanci clusteru na jádro CPU, pokud máte nějaký nedostatek CPU a chcete maximalizovat počet vláken.

Nejsem příliš obeznámen se zdrojovým kódem nebo vnitřními prvky redis, ale vidím, jak použití jednoho vlákna usnadňuje implementaci atomických akcí bez zámku. Vlákna by to udělala složitějším a nezdá se, že by nabízela velké výhody, protože redis není vázán na CPU. Implementace souběžnosti na úrovni nad instancí redis se zdá být dobrým řešením as tím pomáhají Redis Sentinel a Redis Cluster.

Co se stane s jinými požadavky, když redis trvá dlouho?

Tyto ostatní požadavky se zablokují, dokud redis dokončí dlouhý požadavek. V případě potřeby to můžete otestovat pomocí client-pause příkaz.



  1. Jak provedu dotaz na pole id v Mongoose?

  2. vyhledávání v agregaci mongodb

  3. Efektivní způsob mapování dat z Redis

  4. MongoDB – Index se nepoužívá při řazení a omezuje se na dotaz s rozsahem