sql >> Database >  >> NoSQL >> Redis

Hoe vraag je *juist* Redis van Tornado?

Als het gaat om het blokkeren van opdrachten zoals BLPOP of het luisteren naar een Pub/Sub-kanaal, heb je een asynchrone client zoals tornado-redis nodig. U kunt met deze demo beginnen om te zien hoe de tornado-redis-client kan worden gebruikt om een ​​eenvoudige openbare chattoepassing te ontwikkelen.

Maar voor de meeste andere gevallen raad ik aan om de synchrone redis-py-client in combinatie met hireis te gebruiken.

Het belangrijkste voordeel van een asynchrone client is dat uw server inkomende verzoeken kan verwerken terwijl u wacht op de reactie van de Redis-server. De Redis-server is echter zo snel dat in de meeste gevallen een overhead van het instellen van asynchrone callbacks in uw Tornado-toepassing meer toevoegt aan de totale verwerkingstijd van verzoeken dan de tijd die wordt besteed aan het wachten op de reactie van de Redis-server.

Met behulp van een asynchrone client kunt u proberen meerdere verzoeken tegelijkertijd naar de Redis-server te sturen, maar de Redis-server is een single-threaded (net als Tornado-server), dus het zal deze verzoeken één voor één beantwoorden en je wint er bijna niets mee. En in feite hoeft u niet meerdere Redis-commando's tegelijkertijd naar dezelfde Redis-server te sturen, zolang er pijplijnen en commando's zijn zoals MGET/MSET.

Een asynchrone client heeft enkele voordelen wanneer u meerdere Redis-serverinstanties gebruikt, maar ik raad aan om een ​​synchrone (redis-py) client en een proxy zoals twemproxy of deze te gebruiken (de laatste ondersteunt pipelining en MGET/MSET-opdrachten).

Ik raad ook aan om de verbindingspooling niet te gebruiken bij het gebruik van de redis-py-client in Tornado-applicaties . Maak gewoon een enkele Redis objectinstantie voor elke Redis-database waarmee uw toepassing verbinding maakt.



  1. UUID-verkorting

  2. redis-geheugen en cpu-pieken

  3. MongoDB $tan

  4. Meteor mongo werkt geneste array bij