När det gäller att blockera kommandon som BLPOP eller lyssna på en Pub/Sub-kanal behöver du en asynkron klient som tornado-redis. Du kan börja med den här demon för att se hur tornado-redis-klienten kan användas för att utveckla en enkel offentlig chattapplikation.
Men jag skulle rekommendera att du använder den synkrona redis-py-klienten tillsammans med hirdis för de flesta andra fall.
Den största fördelen med asynkron klient är att din server kan hantera inkommande förfrågningar medan du väntar på Redis-serversvar. Redis-servern är dock så snabb att i de flesta fall en omkostnad för att ställa in asynkrona återuppringningar i din Tornado-applikation lägger mer till den totala tiden för förfrågningsbehandling än den tid som ägnas åt att vänta på Redis-serversvar.
Med en asynkron klient kan du försöka skicka flera förfrågningar till Redis-servern samtidigt, men Redis-servern är en entrådig (precis som Tornado-server), så den kommer att svara på dessa förfrågningar en i taget och du vinner nästan ingenting. Och faktiskt, du behöver inte skicka flera Redis-kommandon samtidigt till samma Redis-server så länge det finns pipelines och kommandon som MGET/MSET.
En asynkron klient har vissa fördelar när du använder flera Redis-serverinstanser, men jag föreslår att du använder en synkron (redis-py) klient och en proxy som twemproxy eller den här (den senare stöder pipelining och MGET/MSET-kommandon).
Jag föreslår också att du inte använder anslutningspoolningen när du använder redis-py-klienten i Tornado-program . Skapa bara en enda Redis
objektinstans för varje Redis-databas som din applikation ansluter till.