2 <!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01//EN"> 
   5         <link type=
"text/css" rel=
"stylesheet" href=
"style.css" /> 
  12             <img style=
"border:none" alt=
"Redis Documentation" src=
"redis.png"> 
  16             <div id=
"pagecontent"> 
  18 <!-- This is a (PRE) block.  Make sure it's left aligned or your toc title will be off. --> 
  19 <b>Lists: Contents
</b><br>  <a href=
"#Redis List Type">Redis List Type
</a><br>  <a href=
"#Implementation details">Implementation details
</a> 
  22                 <h1 class=
"wikiname">Lists
</h1> 
  29                     #sidebar 
<a href=
"ListCommandsSidebar.html">ListCommandsSidebar
</a><h1><a name=
"Redis List Type">Redis List Type
</a></h1>Redis Lists are lists of 
<a href=
"Strings.html">Redis Strings
</a>, sorted by insertion order. It's possible to add elements to a Redis List pushing new elements on the head (on the left) or on the tail (on the right) of the list.
<br/><br/>The 
<a href=
"RpushCommand.html">LPUSH
</a> command inserts a new elmenet on head, while 
<a href=
"RpushCommand.html">RPUSH
</a> inserts a new element on tail. A new list is created when one of this operations is performed against an empty key.
<br/><br/>For instance if perform the following operations:
 
  30 <pre class=
"codeblock python" name=
"code"> 
  31 LPUSH mylist a   # now the list is 
"a
" 
  32 LPUSH mylist b   # now the list is 
"b
",
"a
" 
  33 RPUSH mylist c   # now the list is 
"b
",
"a
",
"c
" (RPUSH was used this time)
 
  35 The resulting list stored at 
<i>mylist
</i> will contain the elements 
"b
",
"a
",
"c
".
<br/><br/>The max length of a list is 
232-
1 elements (
4294967295, more than 
4 billion of elements per list).
<h1><a name=
"Implementation details">Implementation details
</a></h1>Redis Lists are implemented as doubly liked lists. A few commands benefit from the fact the lists are doubly linked in order to reach the needed element starting from the nearest extreme (head or tail). 
<a href=
"LrangeCommand.html">LRANGE
</a> and 
<a href=
"LindexCommand.html">LINDEX
</a> are examples of such commands.
<br/><br/>The use of linked lists also guarantees that regardless of the length of the list pushing and popping are O(
1) operations.
<br/><br/>Redis Lists cache length information so 
<a href=
"LlenCommand.html">LLEN
</a> is O(
1) as well.