Ответ 1
Когда дело доходит до блокировки команд, таких как 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, к которой ваше приложение подключается.