Redis · Redis 7.4.11
В 2013 году Twitter обслуживал 150 млн активных пользователей и около 300 тыс. чтений лент в секунду. Домашняя лента хранилась в Redis готовой: при публикации твита его id дописывался в ленту каждого подписчика (fanout on write), а длина ленты ограничивалась примерно 800 записями.
Лента пользователя 42 — список timeline:42, новые id в голове (индекс 0). Подписка опубликовала твит 1913000777. Добавьте его в ленту так, чтобы в ней осталось не больше 800 самых свежих id. Последняя команда во всех вариантах — LRANGE timeline:42 0 -1, по ней видно ленту целиком.
В работе: Ленты, история уведомлений, последние N событий пользователя.
Источник: доклад Twitter «Timelines at Scale», пересказ High Scalability, 2013. Условие пересказано своими словами.
Какая последовательность добавит твит в голову ленты и оставит не больше 800 записей?
- LPUSH, затем LTRIM 0 799
- RPUSH, затем LTRIM 0 799
- LTRIM до LPUSH
- Только LPUSH