2015-06-06 2 views

ответ

1

Ответ должен состоять как минимум из 30 символов, поэтому мой: «да».

1

Конечно, это возможно. Трубопровод - это простой transaction, который работает так же, как выполнение пакетных запросов одновременно. Он использует MULTI/EXEC в коде позади. По конвейеру Redis будет стоять в очереди команд. И все команды выполняются после вызова EXEC. (pipeline.flush()).

Это он только для обеспечения выполнения некоторых команд, в то время как некоторые нежелательные события могут провал (закрытие соединения клиента)

я использовал конвейер в нескольких потоках, и не было никаких проблем. Но я рекомендовал, если вы обрабатываете некоторые тяжелые вещи одновременно, было бы лучше использовать несколько экземпляров (если их можно разделить) или разных подключений.

2

Чтобы использовать его с многопроцессорной моделью python, вам нужно будет создать новое соединение в каждом подпроцессе, чтобы каждый процесс имел свое собственное соединение. В противном случае вы можете столкнуться с проблемами конкуренции на стороне клиента.

Сказанное, если есть команды, которые необходимо выполнить в качестве транзакции, вы будете использовать мульти/exec самостоятельно, поскольку конвейерная обработка не то же самое и не называет его. Самый простой способ с py-redis - установить флаг транзакции True при вызове конвейера. Но делайте это только в том случае, если вам действительно нужен любой другой клиент, чтобы дождаться завершения этого конвейера. Если вы это делаете, вы по существу сделали свое приложение не-threaded, поскольку оно работает как блокировка в базе данных - все остальные клиенты не могут работать в базе данных, пока работает MULTI/EXEC.

Если вы должны использовать MULTI/EXEC и по-прежнему хотите параллелизм, вам нужно будет изолировать группы ключей на разных серверах и запустить сервер на соединение, необходимое для блокировки БД. Если ваши операции находятся на ключах, которые перекрываются в разных процессах, это потребует либо принятия эффектов MULTI/EXEC на общую производительность, либо изменения кода клиента для устранения разногласий.