Redis
 sql >> Database >  >> NoSQL >> Redis

Come si interroga *correttamente* Redis da Tornado?

Quando devi bloccare comandi come BLPOP o ascoltare un canale Pub/Sub, avrai bisogno di un client asincrono come tornado-redis. Puoi iniziare con questa demo per vedere come il client tornado-redis può essere utilizzato per sviluppare una semplice applicazione di chat pubblica.

Ma consiglierei di utilizzare il client sincrono redis-py insieme a rentaldis per la maggior parte degli altri casi.

Il vantaggio principale del client asincrono è che il tuo server può gestire le richieste in arrivo in attesa della risposta del server Redis. Tuttavia, il server Redis è così veloce che nella maggior parte dei casi un sovraccarico dovuto alla configurazione di callback asincroni nell'applicazione Tornado aggiunge più tempo al tempo totale di elaborazione della richiesta rispetto al tempo speso in attesa della risposta del server Redis.

Utilizzando un client asincrono puoi provare a inviare più richieste contemporaneamente al server Redis, ma il server Redis è a thread singolo (proprio come il server Tornado), quindi risponderà a queste richieste una per una e non guadagnerai quasi nulla. E, infatti, non è necessario inviare più comandi Redis contemporaneamente allo stesso server Redis purché siano presenti pipeline e comandi come MGET/MSET.

Un client asincrono presenta alcuni vantaggi quando si utilizzano più istanze del server Redis, ma suggerisco di utilizzare un client sincrono (redis-py) e un proxy come twenproxy o questo (quest'ultimo supporta pipelining e comandi MGET/MSET).

Inoltre suggerisco di non utilizzare il pool di connessioni quando si utilizza il client redis-py nelle applicazioni Tornado . Basta creare un singolo Redis istanza dell'oggetto per ogni database Redis a cui si connette l'applicazione.