2016-08-06 2 views
1

Я рассматриваю doc дизайн и реализацию простого твита Twitter с использованием PHP и хранилища ключей Redis. Я обнаружил, что переменная next_post_id является глобальной.Twitter-clone Redis global post id

Мне интересно, почему не каждый пользователь держит свой собственный next_post_id, а пользователь next_post_id и его user_id могут идентифицировать уникальное сообщение. В этом случае мы можем уменьшить конкуренцию при обновлении next_post_id при одновременном доступе.

ответ

0

Redis требует сохранения как можно более простых вещей.

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

Используя команду incr, каждый процесс, соединяющий Redis, получит уникальный идентификатор сообщения, поэтому здесь нет никакой проблемы с этой стратегией.

В этом случае мы можем уменьшить конкуренцию на обновление next_post_id в одновременных доступов

Это не верно, потому что Redis не многопоточный при чтении и записи в базу данных. Он однопоточный. То есть нет одновременного доступа, но последовательный доступ. Вы должны понимать, что не будет пользы от того, что вы сказали.

Может быть, вы хотите взглянуть на эту другую Q & A: Redis is single-threaded, then how does it do concurrent I/O?