1、基本概念
(1)list特点
list中数据可以重复,查询快,增删慢
(2)存储结构
(3)应用
对数据量大的集合数据删减
粉丝列表、评论列表等,利用LRANGE可以很方便地实现分页的功能
任务队列(将待执行的任务的相关信息放入到队列里面)
list通常用来实现一个消息队列,而且可以确保先后顺序,不必像mysql那样需要通过ORDER BY语句来排序
2、命令
(1)向List存取数据
将一个或多个值插入到列表头部(从左侧添加):
127.0.0.1:6379> lpush list1 a b c d e f (integer) 6 127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a"
因为是从左侧添加,因此添加后的排列顺序如下:
获取列表指定位置的元素:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> lrange list1 1 3 1) "e" 2) "d" 3) "c"
查询list中的全部元素:0代表起始元素,-1代表最后一个元素
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a"
右侧添加元素:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> rpush list1 1 2 3 (integer) 9 127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 7) "1" 8) "2" 9) "3"
根据下标取出数据:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 7) "1" 8) "2" 9) "3" 127.0.0.1:6379> lindex list1 2 "d" 127.0.0.1:6379> lindex list1 -1 "3" 127.0.0.1:6379> lindex list1 -2 "2"
0代表第一个元素,-1代表最后一个元素,-2代表倒数第二个元素
(2)从两头弹出元素
弹出后元素消失:
(3)list的长度
(4)blpop命令:弹出并获取list的第一个元素,需要设置时间,如果没有元素会一直等待,直到等待超时或发现元素位置,如果有的话直接执行
127.0.0.1:6379> lrange list1 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 6) "1" 7) "2" 8) "3" 127.0.0.1:6379> blpop list1 2000 1) "list1" 2) "e"
127.0.0.1:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
(5)删除若干个值为XXX的元素:
从左边开始删除:
上图为:从左向右数,删除两个值为b的元素。
从右边开始删除:
从右边删除,只需要在数字前面添加负号即可。
(6)替换一个元素
(7)插入
在某一个元素之后插入:
在某一个元素之前插入:
(8)ltrim:保留删除
127.0.0.1:6379> lrange list1 0 -1 1) "d" 2) "c" 3) "b" 4) "a" 5) "1" 6) "2" 7) "3" 127.0.0.1:6379> ltrim list1 1 3 OK 127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a"
(9)rpoplpush:移除列表的最后一个元素,并将该元素添加到另一个列表的左侧并返回
127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> lrange list2 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> rpoplpush list1 list2 "a" 127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379>
除此之外,还有rpoplpush
循环操作:
127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> rpoplpush list2 list2 "1" 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "a" 3) "5" 4) "4" 5) "3" 6) "2" 127.0.0.1:6379> rpoplpush list2 list2 "2" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4" 6) "3"
(10)弹出列表中的元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出的元素位置
127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4" 6) "3" 127.0.0.1:6379> brpoplpush list2 list1 2000 "3" 127.0.0.1:6379> lrange list1 0 -1 1) "3" 2) "c" 3) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4"