Когда речь идет о блокировании таких команд, как BLPOP или прослушивании канала Pub / Sub, вам потребуется асинхронный клиент, такой как tornado-redis . . Вы можете начать с это демо , чтобы увидеть, как клиент tornado-redis может быть использован для разработки простого приложения для публичного чата.
Но я бы рекомендовал использовать синхронный клиент redis-py в сочетании с hiredis для большинства других случаев.
Основным преимуществом асинхронного клиента является то, что ваш сервер может обрабатывать входящие запросы в ожидании ответа сервера Redis. Однако сервер Redis настолько быстр, что в большинстве случаев накладные расходы на установку асинхронных обратных вызовов в приложении Tornado увеличивают общее время обработки запроса по сравнению с временем ожидания ответа сервера Redis.
Используя асинхронный клиент, вы можете попытаться отправить несколько запросов на сервер Redis одновременно, но сервер Redis является однопоточным (так же, как сервер Tornado), поэтому он будет отвечать на эти запросы по одному один, и вы почти ничего не получите. И, фактически, вам не нужно отправлять несколько команд Redis одновременно на один и тот же сервер Redis, если существуют конвейеры и команды, такие как MGET / MSET.
Асинхронный клиент имеет некоторые преимущества при использовании нескольких экземпляров сервера Redis, но я предлагаю использовать синхронный (redis-py) клиент и прокси-сервер, например twemproxy или , этот ( последний поддерживает конвейеризацию и команды MGET / MSET).
Также я предлагаю не использовать пул соединений при использовании клиента redis-py в приложениях Tornado . Просто создайте отдельный экземпляр объекта Redis
для каждой базы данных Redis, к которой подключается ваше приложение.