list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等。
操作中的key理解为链表的名字。
redis的list类型其实就是一个每个子元素都是string类型的双向链表。
链表的最大长度是 2的32次方。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素。
这使得list既可以用作栈,有可以用作队列。
lpush 在key对应的list头部添加字符串元素:
lpush mylist brother
lpush mylist lamp
lpop 从list的头部删除元素,并返回删除的元素:
lpop mylist #后放入的先弹出来
rpush 在key对应的list的尾部添加字符串元素
rpop 从右边弹出(lpush和rpop结合使用:队列从左边进右边出)
从 list 的尾部删除元素,并返回删除元素
lrange 获取范围:
lrange mylist 0 2 #获取下班从0到2的,不会被弹出
lrange mylist 0 -1 #获取整个list不会被弹出
linsert 在key对应的list的特定的位置之前或之后添加字符串元素:
lpush mylist aa
lpush mylist bb
linsert mylist before aa cc
lrange mylist 0 -1
结果如下:
1) "bb"
2) "cc"
3) "aa"
lset
设置 list
中指定下标的元素值(下标从
0 开始)与操作
php 索引数组类似
rpush mylist4 one
lset mylist4 0 two
lrange mylist4 0 -1
lrem
从 key
对应 list
中删除 count
个和 value
相同的元素count>0
时,按从头到尾的顺序删除
lpush mylist5 a
lpush mylist5 b
lpush mylist5 a
lpush mylist5 a
lpush mylist5 c
lrange mylist5 0 -1
lrem mylist5 2 a
此时是c a a b a删除两个 value 是 a 的
lrange mylist5 0 -1
结果
1) "c"2) "b"3) "a"
count<0 时,按从尾到头的顺序删除lrem mylist5 -2 a
count=0 时,删除全部lrem mylist5 0 a
ltrim 保留 start 至 end 之间的元素.
通常用来截取保存最新的 N 条数据。
ltrim mylist 0 2 ,表示只保留最新 3 条数据
lpush mylist6 a
lpush mylist6 b
lpush mylist6 c
lpush mylist6 d
lpush mylist6 e
lrange mylist6 0 -1
结果是
1) "e" 2) "d" 3) "c" 4) "b" 5) "a"
ltrim mylist6 1 3 lrange mylist6 0 -1
结果:
1) "d" 2) "c" 3) "b"
从下标为 1 开始,到下标为 3 范围保留,其它的删除
如果第二个参数是-1,则后面的全部保留
rpoplpush
从第一个 list
的尾部移除元素并添加到第二个
list 的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个
list 是空或者不存在返回
nil
rpoplpush mylist6 mylist7
lindex
返回名称为 key
的 list
中 index
位置的元素
lindex mylist9 1
取 mylist9
中,下标为 1
的成员
llen
取 list
的长度
返回 key 对应 list 的长度