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

Jak Redis dosahuje vysoké propustnosti a výkonu?

V dokumentaci Redis je spousta informací, abyste pochopili, jak to funguje. Nyní, abychom konkrétně odpověděli na vaše otázky:

1) Jak jsou udržována připojení?

Připojení jsou udržována a spravována pomocí smyčky událostí ae (navržené autorem Redis). Všechny síťové I/O operace jsou neblokující. Ae můžete vidět jako minimalistickou implementaci využívající nejlepší síťový I/O demultiplexní mechanismus platformy (epoll pro Linux, kqueue pro BSD, atd ...), stejně jako libevent, libev, libuv, atd ...

2) Jsou připojení TCP nebo HTTP?

Připojení jsou TCP pomocí protokolu Redis, což je jednoduchý textově orientovaný protokol kompatibilní s telnetem, který podporuje binární data. Tento protokol je obvykle efektivnější než HTTP.

3) Jak se spravuje paměť?

Paměť je spravována spoléháním se na univerzální alokátor paměti. Na některých platformách je to ve skutečnosti alokátor systémové paměti. Na některých jiných platformách (včetně Linuxu) byl vybrán jemalloc, protože nabízí dobrou rovnováhu mezi spotřebou CPU, podporou souběžnosti, fragmentací a nároky na paměť. Zdrojový kód jemalloc je součástí distribuce Redis.

Na rozdíl od jiných produktů (jako je memcached) v Redis neexistuje implementace slab alokátoru.

Řada optimalizovaných datových struktur byla implementována na vrcholu univerzálního alokátoru, aby se snížila paměťová náročnost.

4) Jaké jsou techniky synchronizace používané k dosažení vysoké propustnosti navzdory konkurenčnímu čtení/zápisu?

Redis je smyčka událostí s jedním vláknem, takže není třeba provádět žádnou synchronizaci, protože všechny příkazy jsou serializovány. Některá vlákna nyní také běží na pozadí pro interní účely. Ve vzácných případech přistupují k datům spravovaným hlavním vláknem, používají se klasická synchronizační primitiva pthread (například mutexy). Ale 100 % datových přístupů prováděných jménem více klientských připojení nevyžaduje žádnou synchronizaci.

Více informací naleznete zde:Redis je jednovláknový, jak tedy dělá souběžné I/O?

Jaký je rozdíl mezi obyčejnou vanilla implementací počítače s mezipamětí a serverem, který může reagovat na příkazy, a boxem Redis?

Není v tom žádný rozdíl. Redis je jednoduchá implementace stroje s mezipamětí a serverem, který může reagovat na příkazy. Ale je to implementace, která je provedena správně:

  • používá model smyčky událostí s jedním vláknem
  • používání jednoduchých a minimalistických datových struktur optimalizovaných pro jejich odpovídající případy použití
  • nabízí sadu příkazů pečlivě vybraných tak, aby vyvážily minimalismus a užitečnost
  • neustálé cílení na nejlepší nezpracovaný výkon
  • dobře přizpůsobené moderním mechanismům operačního systému
  • poskytování více mechanismů persistence, protože přístup „jedna velikost se hodí všem“ je pouze snem.
  • poskytování stavebních bloků pro HA mechanismy (například replikační systém)
  • vyhnete se nahromadění zbytečných vrstev abstrakce, jako jsou palačinky
  • výsledkem je čistá a srozumitelná základna kódu, se kterou může být spokojen každý dobrý vývojář v jazyce C



  1. Node + Mongoose:Získat poslední vložené ID?

  2. Nahrání souboru Node.js (Express 4, MongoDB, GridFS, GridFS-Stream)

  3. MongoDB $ cmp

  4. Příklad použití socket.io-redis