在list里面,我们可以把list当成,栈、队列、阻塞队列!
所有命令以l开头
LPUSH:#将一个或这多个值插入头部(左)
LPUSH:#将一个或这多个值插入尾部(右)
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> lpush lsit 1 #将一个或这多个值插入头部
(integer) 1
127.0.0.1:6379> lpush lsit 2
(integer) 2
127.0.0.1:6379> lpush lsit 3
(integer) 3
127.0.0.1:6379> lrange list 0 -1 #获取list的值
(empty array)
127.0.0.1:6379> keys *
1) "lsit"
127.0.0.1:6379> lrange lsit 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange lsit 0 1 #通过区间获取具体的值
1) "3"
2) "2"
127.0.0.1:6379> rpush lsit 4
(integer) 4
127.0.0.1:6379> lrange lsit 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
127.0.0.1:6379>
LPOP :移除list的第一个元素
RPOP :移除list的最后一个元素
127.0.0.1:6379> LPOP lsit
"3"
127.0.0.1:6379>
127.0.0.1:6379> RPOP lsit
"4"
127.0.0.1:6379> lrange lsit 0 -1
1) "2"
2) "1"
127.0.0.1:6379>
LINDEX:通过下标获取list的某一个值
127.0.0.1:6379> lindex lsit 1
"1"
127.0.0.1:6379> lindex lsit 0
"2"
127.0.0.1:6379>
LLEN:返回列表的长度
127.0.0.1:6379> llen lsit
(integer) 2
127.0.0.1:6379>
LREM:移除指定的值!
127.0.0.1:6379> LREM lsit 1 1 #移除list集合中指定个数的value;精确匹配
(integer) 1
127.0.0.1:6379> lpush lsit 1
(integer) 2
127.0.0.1:6379> lpush lsit 1
(integer) 3
127.0.0.1:6379> LRANGE lsit 0 -1
1) "1"
2) "1"
3) "2"
127.0.0.1:6379> LREM lsit 2 1
(integer) 2
127.0.0.1:6379> LRANGE lsit 0 -1
1) "2"
127.0.0.1:6379>
TRIM:通过下标截取指定长度,这个list已经被改变了,只剩下截取的元素了
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> RPUSH list "one"
(integer) 1
127.0.0.1:6379> RPUSH list "two"
(integer) 2
127.0.0.1:6379> RPUSH list "three"
(integer) 3
127.0.0.1:6379> RPUSH list "four"
(integer) 4
127.0.0.1:6379> LTRIM list 1 3
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "three"
3) "four"
127.0.0.1:6379>
rpoplpush :移除列表的最后一个元素,添加到另外一个列表
127.0.0.1:6379> RPUSH mylist "welcome"
(integer) 1
127.0.0.1:6379> RPUSH mylist "chongqing"
(integer) 2
127.0.0.1:6379> rpoplpush mylist otherlist #移除列表的最后一个元素,添加到另外一个列表
"chongqing"
127.0.0.1:6379>
127.0.0.1:6379> LRANGE mylist 0 -1 #查看原来的列表
1) "welcome"
127.0.0.1:6379> LRANGE otherlist 0 -1 #查看目标的列表
1) "chongqing"
LSET :将列表中指定下标的值替换为另一个值,更新操作
LINSERT:将某个具体的value插入到列表中,某个元素的前面或者后面。
127.0.0.1:6379> RPUSH mylist "welcome"
(integer) 1
127.0.0.1:6379> RPUSH mylist "chongqing"
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "welcome"
2) "chongqing"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "welcome"
2) "chongqing"
127.0.0.1:6379> LINSERT mylist after "welcome" "to"
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "welcome"
2) "to"
3) "chongqing"
127.0.0.1:6379>
小结:
- 实际是一个链表,before Node after ,left ,right 都可以插入值
- 如果key不存在,创建新的链表
- 如果key存在,创建新的内容
- 如果移除所有值,空链表,也代表不存在!
- 两边插入或者改动值,效率最高,中间元素,相对效率会低一点
- 消息队列,消息排队(Lpush Rpop),栈(Lpush Lpop)!