Cuando se trata de bloquear comandos como BLPOP o de escuchar un canal Pub/Sub, necesitará un cliente asíncrono como tornado-redis. Puede comenzar con this demo para ver cómo se puede usar el cliente tornado-redis para desarrollar una aplicación de chat público simple.
Pero yo recomendaría usar el cliente síncrono redis-py junto con hiredis para la mayoría de los otros casos.
La principal ventaja del cliente asíncrono es que su servidor puede manejar las solicitudes entrantes mientras espera la respuesta del servidor Redis. Sin embargo, el servidor Redis es tan rápido que en la mayoría de los casos una sobrecarga de configuración de devoluciones de llamada asíncronas en su aplicación Tornado agrega más tiempo total de procesamiento de solicitudes que el tiempo dedicado a esperar la respuesta del servidor Redis.
Al usar un cliente asíncrono, puede intentar enviar varias solicitudes al servidor Redis al mismo tiempo, pero el servidor Redis es de un solo subproceso (como el servidor Tornado), por lo que responderá a estas solicitudes una- uno por uno y no ganarás casi nada. Y, de hecho, no tiene que enviar múltiples comandos Redis al mismo tiempo al mismo servidor Redis, siempre que haya canalizaciones y comandos como MGET/MSET.
Un cliente asíncrono tiene algunas ventajas cuando se utilizan varias instancias del servidor Redis, pero se sugiere emplear un cliente síncrona (Redis-PY) y un proxy como twemproxy o this one (este último soportes canalización y ordena MGET/MSET).
También sugiero no utilizar la agrupación de conexiones cuando se utiliza el cliente redis-py en las aplicaciones Tornado. Simplemente cree una única instancia de objeto Redis
para cada base de datos de Redis a la que se conecte su aplicación.
De hecho, el uso de un cliente síncrono suena bien para el caso promedio, pero el peor caso podría no ser aceptable.Ejemplo 1: si Redis se cuelga o la red a Redis es lenta, se bloqueará la aplicación Tornado. Ejemplo 2: la serialización de solicitudes en el cliente y la serialización en el servidor solo son equivalentes si la latencia de la red es 0, que casi nunca es el caso. –
tornado-redis ya no se mantiene. Pero el repositorio sugiere algunas alternativas: https://github.com/aio-libs/aioredis y https://github.com/mrjoes/toredis – matyas