Как Redis List позволяет индексировать и нажимать / выталкивать влево и вправо с постоянным временем? - PullRequest
1 голос
/ 30 мая 2020

Какую внутреннюю структуру данных реализует список Redis, чтобы это позволяло? Связанный список потребует индексации O (n), а массив - O (n) нажатия / выталкивания влево / вправо.

1 Ответ

1 голос
/ 30 мая 2020

Согласно официальной документации они реализованы как linked list.

Списки Redis реализованы через связанные списки. Это означает, что даже если у вас есть миллионы элементов внутри списка, операция добавления нового элемента в заголовок или в конец списка выполняется за постоянное время. Скорость добавления нового элемента с помощью команды LPU SH в заголовок списка из десяти элементов такая же, как при добавлении элемента в заголовок списка с 10 миллионами элементов.

В чем обратная сторона? Доступ к элементу по индексу происходит очень быстро в списках, реализованных с помощью массива (индексированный доступ с постоянным временем), и не так быстро в списках, реализованных связанными списками (где операция требует объема работы, пропорционального индексу элемента, к которому осуществляется доступ).

Из-за этого LPOP / RPOP или LPUSH / PUSH временная сложность равна O(1), так как они имеют дело с орлом / решкой. В то время как временная сложность LINDEX s равна O(N).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...