Redis五大数据结构之List及其常见使用命令

List常用命令:

LPUSH / RPUSH / LRANGE :
LPUSH :从左边向链表插入(类似头插法)
RPUSH :从右边向链表插入(类似尾插法)
LRANGE:从左输出链表

115.159.67.200:6379[1]> LPUSH list01 1 2 3 
(integer) 3
115.159.67.200:6379[1]> LRANGE list01 0 -1
1) "3"
2) "2"
3) "1"
115.159.67.200:6379[1]> RPUSH list02 1 2 3
(integer) 3
115.159.67.200:6379[1]> LRANGE list02 0 -1
1) "1"
2) "2"
3) "3"

LPOP / RPOP
LPOP:从左弹出一个元素(相当于出栈)
RPOP:从右弹出一个元素(相当于出队列)

115.159.67.200:6379[1]> LPOP list01
"3"
115.159.67.200:6379[1]> RPOP list02
"3"
115.159.67.200:6379[1]> LRANGE list01 0 -1
1) "2"
2) "1"
115.159.67.200:6379[1]> LRANGE list02 0 -1
1) "1"
2) "2"

LINDEX:查询指定索引位置的元素

115.159.67.200:6379[1]> LRANGE list01 0 -1
1) "2"
2) "1"
115.159.67.200:6379[1]> LINDEX list01 0
"2"
115.159.67.200:6379[1]> LRANGE list02 0 -1
1) "1"
2) "2"
115.159.67.200:6379[1]> LINDEX list02 0
"1"

LLEN:输出链表的长度

115.159.67.200:6379[1]> LLEN list01
(integer) 2

LREM:
LREM key n value:删除n个value
例如:LREM list03 2 3 :删除list03中的2个3

115.159.67.200:6379[1]> LRANGE list03 0 -1
1) "1"
2) "2"
3) "3"
4) "1"
5) "2"
6) "3"
7) "1"
8) "2"
9) "3"
115.159.67.200:6379[1]> LREM list03 2 3
(integer) 2
115.159.67.200:6379[1]> LRANGE list03 0 -1
1) "1"
2) "2"
3) "1"
4) "2"
5) "1"
6) "2"
7) "3"

LTRIM
LTRIM key start_index end_index:截取两个index之间的内容,并赋值给key
例如:LTRIM list04 1 3

115.159.67.200:6379[1]> LRANGE list04 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
115.159.67.200:6379[1]> LTRIM list04 1 3
OK
115.159.67.200:6379[1]> LRANGE list04 0 -1
1) "1"
2) "2"
3) "3"

RPOPLPSUH
RPOPLPSUH source_list object_list:把源链表的尾节点取出,插入到目的链表的头
例如:RPOPLPUSH list05 list04

115.159.67.200:6379[1]> LRANGE list04 0 -1
1) "1"
2) "2"
3) "3"
115.159.67.200:6379[1]> 
115.159.67.200:6379[1]> RPUSH list05 1 2 3 4 5
(integer) 5
115.159.67.200:6379[1]> RPOPLPUSH list05 list04
"5"
115.159.67.200:6379[1]> LRANGE list04 0 -1
1) "5"
2) "1"
3) "2"
4) "3"
115.159.67.200:6379[1]> LRANGE list05 0 -1
1) "1"
2) "2"
3) "3"
4) "4"

LSET
LSET key index value:设置指定链表中的指定索引位置的值

115.159.67.200:6379[1]> LRANGE list05 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
115.159.67.200:6379[1]> LSET list05 3 x
OK
115.159.67.200:6379[1]> LRANGE list05 0 -1
1) "1"
2) "2"
3) "3"
4) "x"

LINSERT
LINSERT key before / after v1 v2:
例如:
LINSERT list05 before x hello :在x前面插入hello
LINSERT list05 after x redis:在x后面插入redis

115.159.67.200:6379[1]> LRANGE list05 0 -1
1) "1"
2) "2"
3) "3"
4) "x"
115.159.67.200:6379[1]> LINSERT list05 before x hello
(integer) 5
115.159.67.200:6379[1]> LINSERT list05 after x redis
(integer) 6
115.159.67.200:6379[1]> LRANGE list05 0 -1
1) "1"
2) "2"
3) "3"
4) "hello"
5) "x"
6) "redis"

List小结:

List是一个字符串链表,left,right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了,因为操作中间元素时,需要遍历链表,通过next操作才能找到指定索引位置。

猜你喜欢

转载自blog.csdn.net/TreeCode/article/details/108247479