系统学习redis之五——redis数据类型之list类型及操作

list数据类型介绍

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key可以理解为链表的名字。redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样,list既可以作为栈,又可以作为队列。

额,用两个比较通俗的例子描述栈和队列的区别:
栈:就像先往篮子里里面装苹果,装满之后再拿出来,先放进去的,会最后拿出来;后放进去的,最先拿出来。也就是先进后出,后进先出
队列:就像吸管吸果粒一样,从吸管的一头进去,另一头出去,先进入吸管的果粒就会先被吸出去,后进入吸管的,就后备吸出去。即先进先出,后进后出

list数据类型方法

  • lpush:在key对应的list的头部添加字符串元素
  • rpush:在key对应list的尾部添加字符串元素
  • linsert:在key对应list的特定位置前或后添加字符串
  • lset:设置list中指定下标的元素值
  • lrem:从key对应list中删除n个和value相同的元素(当n>0,表示从头开始删除;当n=0表示全部删除;当n<0,表示从尾部开始删除)
  • ltrim:保留指定key的值范围内的数据
  • lpop:从list的头部删除元素,并返回已经删除的元素
  • rpop:从list的尾部开始依次删除元素,并返回已经删除的元素,与lpop相对应
  • rpoplpush:从第一个list的尾部移除元素,并添加到第二个list的头部
  • lindex:返回名称为key的list中index位置的元素(即取索引值对应的元素)
  • llen:返回key对应list的长度(也就是显示list里面有多少个元素)

方法及操作

1)lpush:在key对应的list的头部添加字符串元素
例如:给list1依次加入元素hello和world

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LPUSH list1 hello
(integer) 1
127.0.0.1:6379> LPUSH list1 world
(integer) 2     #这里的2和上面返回的1不是表示是否成功,而是表示元素的个数,list里面有两个元素
127.0.0.1:6379> LRANGE list1 0 -1   # 0表示开头第一个元素,-1表示list最后一个元素。这句话表示获取list的开头到结尾所有元素
1) "world"
2) "hello"          #注意,进去的时候的顺序是hello在前,world在后,但是出来的时候就是world在前,hello在后了。也就是栈
127.0.0.1:6379> 

备注,同《系统学习redis之三——redis数据类型之string类型及操作》一样,后面的例子也都在同一台机器一次性操作完毕的,因为后面的代码如果不加上“ [root@test101 redis-4.0.1]# src/redis-cli ”这一句。代码高亮也会格式有问题,所以后面所有的例子中都加上了“[root@test101 redis-4.0.1]# src/redis-cli ”,只是为了格式问题。

2)rpush:在key对应list的尾部添加字符串元素
例如:在list3一次插入hello和world

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> RPUSH list3 hello
(integer) 1
127.0.0.1:6379> RPUSH list3 world
(integer) 2
127.0.0.1:6379> LRANGE list3 0 -1
1) "hello"    #这里就是先进先出了,也就是队列
2) "world"
127.0.0.1:6379> 

3)linsert:在key对应list的特定位置前或后添加字符串
例如:在list3的world前面加入字符串new1,在world的后面添加字符串new2

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list3 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> 
127.0.0.1:6379> LINSERT list3 before world new1
(integer) 3
127.0.0.1:6379> LRANGE list3 0 -1
1) "hello"
2) "new1"   #在world的前面添加new1添加成功
3) "world"
127.0.0.1:6379> LINSERT list3 after world new2
(integer) 4
127.0.0.1:6379> LRANGE list3 0 -1
1) "hello"
2) "new1"
3) "world"
4) "new2"            #在world的后面添加new1添加成功
127.0.0.1:6379> 

4)lset:设置list中指定下标的元素值
例如:下面将list5里面下标为1的元素改为four

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LPUSH list5 one
(integer) 1
127.0.0.1:6379> LPUSH list5 two
(integer) 2
127.0.0.1:6379> LPUSH list5 three
(integer) 3
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LSET list5 1 four  #将下标为1的元素,改为four
OK
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
2) "four"       #原来的two就变成了four
3) "one"
127.0.0.1:6379> 

5)lrem:从key对应list中删除n个和value相同的元素(当n>0,表示从头开始删除;当n=0表示全部删除;当n<0,表示从尾部开始删除)
例如:从list5中删除n个元素one
当n为正值,且不等于0,表示从头删除n个和指定值相同的元素

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "one"
3) "one"
4) "one"
5) "two"
6) "three"
7) "four"
127.0.0.1:6379> LREM list5 3 "one"   #从list5中删除3个one,最前面的3个one被删除了
(integer) 3         #这里的3,表示的是删除的元素的个数
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> 

当n=0,表示将list里面所有和指定值相同的元素删除掉

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1   #这里设置为0,表示将所有的one都全部删除
1) "one"
2) "one"
3) "three"
4) "four"
127.0.0.1:6379> LREM list5 0 "one"
(integer) 2
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
2) "four"
127.0.0.1:6379> 

当n<0,表示从尾部开始删除n个和指定值相同的元素

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "one"
3) "two"
4) "one"
5) "three"
6) "four"
127.0.0.1:6379> LREM list5 -1 "one"   #设置赋值-1,就会从尾部开始删除1个one,因此排在最后的那个one就被删除了
(integer) 1
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "one"
3) "two"
4) "three"
5) "four"
127.0.0.1:6379> 

6)ltrim:保留指定key的值范围内的数据
例如:保留list5里面指定范围之内的数据

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "one"
3) "one"
4) "two"
5) "three"
6) "four"
127.0.0.1:6379> LTRIM list5 1 4   #保留list5里面下标为1-下标为4的元素,其他的都删除
OK
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "one"
3) "two"
4) "three"
127.0.0.1:6379> LTRIM list5 2 -1   #保留list5里面下标为2-最后一个元素,其他的都删除
OK
127.0.0.1:6379> LRANGE list5 0 -1
1) "two"
2) "three"
127.0.0.1:6379> 

7)lpop:从list的头部删除元素,并返回已经删除的元素
例如:将list5里面的元素依次删除

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> LPOP list5
"one"       #删除的第一个元素是one
127.0.0.1:6379> LRANGE list5 0 -1
1) "two"
2) "three"
127.0.0.1:6379> LPOP list5
"two"       #删除的第二个元素是two
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
127.0.0.1:6379> LPOP list5
"three"         #删除的第三个元素是three
127.0.0.1:6379> LRANGE list5 0 -1   #到最后,list就空了
(empty list or set)
127.0.0.1:6379> 

8)rpop:从list的尾部开始依次删除元素,并返回已经删除的元素,与lpop相对应
例如:从尾部依次删除list5的元素

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1   #这是当前list5的所有元素
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> RPOP list5
"one"
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
2) "two"
127.0.0.1:6379> RPOP list5
"two"
127.0.0.1:6379> LRANGE list5 0 -1
1) "three"
127.0.0.1:6379> RPOP list5
"three"
127.0.0.1:6379> LRANGE list5 0 -1   #list5里面的元素已经删除完毕,为空了
(empty list or set)
127.0.0.1:6379> 

9)rpoplpush:从第一个list的尾部移除元素,并添加到第二个list的头部
例如:把list5里面最后一个元素移除,并将其添加到list6的头部

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list5 0 -1
1) "two"
2) "one"
127.0.0.1:6379> LRANGE list6 0 -1
1) "four"
2) "three"
127.0.0.1:6379> RPOPLPUSH list5 list6   #从下面的结果可以看到,list5尾部的元素“one”已经被移除,并且被添加到了list6的头部字一个元素
"one"
127.0.0.1:6379> LRANGE list5 0 -1
1) "two"
127.0.0.1:6379> LRANGE list6 0 -1
1) "one"
2) "four"
3) "three"
127.0.0.1:6379> 

10)lindex:返回名称为key的list中index位置的元素(即取索引值对应的元素)
例如:取list6中索引值为0、1、2对应的元素

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list6 0 -1
1) "one"
2) "four"
3) "three"
127.0.0.1:6379> LINDEX list6 0  #这里的0就是索引值,也就是one的下标值
"one"
127.0.0.1:6379> LINDEX list6 1
"four"
127.0.0.1:6379> LINDEX list6 2
"three"
127.0.0.1:6379> 

11)llen:返回key对应list的长度(也就是显示list里面有多少个元素)
例如:查询list6里面list长度

[root@test101 redis-4.0.1]# src/redis-cli
127.0.0.1:6379> LRANGE list6 0 -1
1) "one"
2) "four"
3) "three"
127.0.0.1:6379> LLEN list6
(integer) 3             #list6里面有3个元素,所以这里的返回值是3
127.0.0.1:6379> 

转载于:https://blog.51cto.com/10950710/2163337

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值