Redis的list是采用链表(简单的字符串列表)来存储的,允许出现重复元素,一个list中最多存放2的32次方减1个元素。Redis的list数据类型的操作,其实是通过操作list的两端数据来完成的。对于链表来说,头尾元素操作的效率都非常高,中间元素操作的效率则比较低。
命令:lpush key value [valus...],从list左边增加元素(list不存在则新增);命令:rpush key value [valus...] 从list右边增加元素(list不存在则新增)
命令:lrange key start stop,获取key中索引从start到stop的元素(包括索引为start和stop的元素),list的索引从0开始,当索引为“-1”时,表示list的最后一个元素。
127.0.0.1:6379> lpush list1 a b c
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush list1 a b c
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"
127.0.0.1:6379> lrange list1 0 2
1) "c"
2) "b"
3) "a"
命令:lpop key,从list左边取出一个元素,并且这个元素会从list中删除; rpop key,从list右侧取出一个元素,这个元素也会从list中删除;
127.0.0.1:6379> lpop list1
"c"
127.0.0.1:6379> rpop list1
"c"
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "a"
4) "b"
blpop/brpop key [key ...] timeout:列表内没有任何元素时,连接将被 blpop/brpop命令阻塞,直到等待超时或发现列表中存在元素并取出一个为止。当给定多个 key
参数时,按参数 key的先后顺序依次检查各个列表,弹出第一个非空列表的最左/右元素。类似lpop/rpop,多了阻塞属性。
命令:lindex key index,获得指定索引的元素值;
127.0.0.1:6379> lindex list1 1
"a"
命令:lset key index value,设置指定索引的元素值;
127.0.0.1:6379> lset list1 0 haha
OK
127.0.0.1:6379> lset list1 1 aaa
OK
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "a"
4) "b"
命令:linsert key before pivot value, 在列表的元素前插入元素;linsert key after pivot value, 在列表的元素后插入元素;
127.0.0.1:6379> linsert list1 before a m
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "m"
4) "a"
5) "b"
127.0.0.1:6379> linsert list1 after a n
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "m"
4) "a"
5) "n"
6) "b"
命令:llen key,获取元素个数
127.0.0.1:6379> llen list1
(integer) 6
命令:lrem key count value 根据value,删除key中count个元素。当count>0时, lrem会从列表左边开始删除;当count<0时, lrem会从列表后边开始删除;当count=0时,lrem删除所有值为value的元素。
127.0.0.1:6379> lrem list1 1 a
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "m"
4) "n"
5) "b"
127.0.0.1:6379> lpush list1 a
(integer) 6
127.0.0.1:6379> rpush list1 a
(integer) 7
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "haha"
3) "aaa"
4) "m"
5) "n"
6) "b"
7) "a"
127.0.0.1:6379> linsert list1 before m a
(integer) 8
127.0.0.1:6379> linsert list1 after m a
(integer) 9
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "haha"
3) "aaa"
4) "a"
5) "m"
6) "a"
7) "n"
8) "b"
9) "a"
127.0.0.1:6379> lrem list1 1 a
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "a"
4) "m"
5) "a"
6) "n"
7) "b"
8) "a"
127.0.0.1:6379> lrem list1 -1 a
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "a"
4) "m"
5) "a"
6) "n"
7) "b"
127.0.0.1:6379> lrem list1 0 a
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "m"
4) "n"
5) "b"
命令:ltrim key start stop,截取保留列表中索引从start到stop的元素(包括索引为start和stop的元素)
127.0.0.1:6379> ltrim list1 0 3
OK
127.0.0.1:6379> lrange list1 0 -1
1) "haha"
2) "aaa"
3) "m"
4) "n"
如果有写的不对的地方,请大家多多批评指正,非常感谢!