list 是一个链表结构,主要功能是 push、pop、获取一个范围的所有值等等,操作中 key 理
解为链表的名字。
Redis 的 list 类型其实就是一个每个子元素都是 string 类型的双向链表。链表的最大长度是(2
的 32 次方)。我们可以通过 push,pop 操作从链表的头部或者尾部添加删除元素。这使得 list
既可以用作栈,也可以用作队列。
lpush, rpush;
1:lpush 是在头部插入, rpush是在尾部插入
redis 127.0.0.1:6378> lpush mylist 'list1'
(integer) 1
redis 127.0.0.1:6378> lpush mylist list2
(integer) 2
redis 127.0.0.1:6378> lrange myllist 0 -1
(empty list or set)
redis 127.0.0.1:6378> lrange mylist 0 -1
1) "list2"
2) "list1"
redis 127.0.0.1:6378> rpush mylist2 one
(integer) 1
redis 127.0.0.1:6378> rpush mylist2 two
(integer) 2
redis 127.0.0.1:6378> lrange mylist2 0 -1
1) "one"
2) "two"
2:linsert 在某个元素前插入
redis 127.0.0.1:6378> linsert mylist2 before one 3 (integer) 3 redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "3" 2) "one" 3) "two"
3:lset修改某个下标的值
redis 127.0.0.1:6378> lset mylist2 0 first OK redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "first" 2) "one" 3) "two"
4:lrem删除指定的一个元素
redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "first" 2) "one" 3) "two" redis 127.0.0.1:6378> lrem mylist2 -2 one (integer) 1 redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "first" 2) "two" redis 127.0.0.1:6378> lrem mylist2 0 first (integer) 1 redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "two" redis 127.0.0.1:6378>
5:ltrim 保留指定的元素
redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq2" 2) "ljq1" 3) "ljq" 4) "1" 5) "first" 6) "two" redis 127.0.0.1:6378> ltrim mylist2 1 2 OK redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq1" 2) "ljq"
6:lpop头部出, rpop尾部出
edis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq4" 2) "ljq3" 3) "ljq2" 4) "ljq1" redis 127.0.0.1:6378> lpop mylist2 "ljq4" redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq3" 2) "ljq2" 3) "ljq1" redis 127.0.0.1:6378> rpop mylist2 "ljq1" redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq3" 2) "ljq2" redis 127.0.0.1:6378>
7:lpoprpush
从第一个 list 的尾部移除元素并添加到第二个 list 的头部,最后返回被移除的元素值,整个操
作是原子的.如果第一个 list 是空或者不存在返回 nil
redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq3" 2) "ljq2" redis 127.0.0.1:6378> lpush mylist3 test1 test2 (integer) 2 redis 127.0.0.1:6378> lrange mylist3 0 -1 1) "test2" 2) "test1" redis 127.0.0.1:6378> rpoplpush mylist2 mylist3 "ljq2" redis 127.0.0.1:6378> lrange mylist2 0 -1 1) "ljq3" redis 127.0.0.1:6378> lrange mylist3 0 -1 1) "ljq2" 2) "test2" 3) "test1"
8:lindex返回下标的元素,llen计算list的长度
redis 127.0.0.1:6378> lrange mylist3 0 -1 1) "ljq2" 2) "test2" 3) "test1" redis 127.0.0.1:6378> lindex mylist3 0 "ljq2" redis 127.0.0.1:6378> llen mylist3 (integer) 3