2012-02-29 3 views
4

Предположим, что есть два клиента, которые получают доступ к одной и той же структуре данных списка redis. Один делает LPOP, а другой делает RPUSH в том же списке. Будет ли конфликт между этими двумя клиентами, если они работают параллельно? Будет ли Redis блокировать mylist (ниже), когда к нему обращается один клиент, даже если клиенты, работающие параллельно, обращаются к разным концам списка?может ли несколько клиентов одновременно обращаться к одному и тому же списку без блокировки в Redis?

Client 1 
RPUSH mylist a 
RPUSH mylist b 

Client 2 
LPOP mylist 
LPOP mylist 

Клиент 1 и Клиент 2 работают параллельно. Дайте мне знать, если в таком сценарии будет конфликт.

ответ

6

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

+3

В конце дня все команды обслуживаются последовательно. Тот, кто приходит первым, получает служение. Мультиплексирование относится к тому, как все входящие команды выбираются из прослушивающего сокета и выполняются сериализованные для выполнения. Но серьезно, ваше дело сильно зависит от случайности параллелизма. – hymloth

0

один не будет блокировать другой, если вы не используете MULTI/EXEC для создания транзакции, чтобы избежать условий гонки, когда один клиентский POPS до того, как другой клиент закончит значения PUSH N.

Смежные вопросы