The Generic List Implementation

  • Code Path: src/t_list.c

It’s a Redis command wrapper of listpack and quicklist.

Listpack Implementation

The same implementation of hash type.

Quicklist Implementation

  • Code Path: src/quicklist.c

If the size of the list exceeds a certain number, Redis will try to convert a listpack to quicklist. A quicklist is a double-linked list of listpack:

  • If the data is too large, it will store the data as a “plain” node, without encoding it as listpack.
  • If the data size exceeds the size limit of listpack, it will create a new list node to store it.
    • If it’s in the middle of the node, the node will split into two nodes.
  • If the list node is empty (after deletion), it will get removed from the list.
  • The list node can be compressed, but not the head or the tail.
  • The pop operation is a combination of get & delete.