redis操作list类型的基本命令

        redis的list类型,相当于java中的linkedlist,可从头添加元素,也可从尾添加元素的双端链表的数据结构,提供赋值,取值,添加元素,修改元素,从头部添加元素,从尾部添加元素等命令,接下来,我们看看有哪些常用命令。

 

  • lpush key 值(向一个list类型中左侧开始添加数据,FILO,先进后出)

127.0.0.1:6379> lpush llists a b c d e
(integer) 5

 

  • rpush key 值(向一个list类型中右侧开始添加数据,FIFO,先进先出)

127.0.0.1:6379> rpush rlists f g h i j
(integer) 5

 

  • lrange key 索引start 索引end(从一个list类型中取数据)

127.0.0.1:6379> lrange llists 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"

127.0.0.1:6379> lrange rlists 0 -1
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"

    这里需要注意的是,list的索引从0开始大家知道,但是取全部list的值时,结束索引需要设置为-1,也可以设置成list长度减1

127.0.0.1:6379>  lrange rlists 0 4
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"

 

  • lpushx key 值(向list中头部开始添加数据)

127.0.0.1:6379> lrange llists 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> lpushx llists z
(integer) 6
127.0.0.1:6379> lrange llists 0 -1
1) "z"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"

  • rpushx key 值(向list中尾部开始添加数据)


127.0.0.1:6379> rpush rlists f g h i j
(integer) 5
127.0.0.1:6379> lrange rlists 0 -1
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"
127.0.0.1:6379> rpushx rlists x
(integer) 6
127.0.0.1:6379> lrange rlists 0 -1
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"
6) "x"

 

  • llen key (获取list的长度)

127.0.0.1:6379> llen llists
(integer) 6
127.0.0.1:6379> llen rlists
(integer) 6

 

  • lindex key 索引(根据索引下标取得list中的值)

127.0.0.1:6379> lrange llists 0 -1
1) "z"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lindex llists 1
"e"

    这里如果下标设置成-1的话,从后边开始取得,java中有越界的异常,而redis的list类型中,如果取得不存在的下标的值,不会抛出异常,返回nil

127.0.0.1:6379> lrange llists 0 -1
1) "z"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"

127.0.0.1:6379>  lindex llists -1
"a"
127.0.0.1:6379> lindex llists 7
(nil)
127.0.0.1:6379>

 

  • lpop key(删除并弹出list中的第一个元素)


127.0.0.1:6379> lrange llists 0 -1
1) "z"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lpop llists
"z"
127.0.0.1:6379> lrange llists 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379>

 

  • rpop key(删除并弹出list中的最后一个元素)

127.0.0.1:6379> lrange rlists 0 -1
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"
6) "x"
127.0.0.1:6379> rpop rlists
"x"
127.0.0.1:6379> lrange rlists 0 -1
1) "f"
2) "g"
3) "h"
4) "i"
5) "j"

 

  • blpop key 秒(这里的b呢,是blocking阻塞的意思,就是删除并弹出list中的第一个元素,当元素不存在是,就等待设定的时间,单位是秒)

终端1

127.0.0.1:6379> blpop lists 1
(nil)
(1.08s)

127.0.0.1:6379> blpop lists 1000 #这里由于变量lists不存在,一直等待1000秒为止,当其他线程给lists赋值,这里我们在新打开一个连接,为lists设置

终端2

127.0.0.1:6379> lpush lists 1 2 3 4 5
(integer) 5

这是终端1结束阻塞,删除list中的第一个元素

127.0.0.1:6379> blpop lists 1000
1) "lists"
2) "5"
(163.50s)

 

  • brpop key 秒(同样这里的b呢,也是blocking阻塞的意思,就是删除并弹出list中的最后一个元素,当元素不存在是,就等待设定的时间,单位是秒)

终端1

127.0.0.1:6379> brpop l1 1000 #这里由于变量l1不存在,一直等待到1000秒为止,当其他线程给l1赋值,这里我们在新打开一个连接,为l1设置

终端2

127.0.0.1:6379> rpush l1 6 7 8 9 10
(integer) 5

这是终端1结束阻塞,删除l1中的最后一个元素

127.0.0.1:6379> brpop l1 1000
1) "l1"
2) "10"
(95.56s)

  • ltrim key 开始索引 结束索引(截取指定范围的值,并重新赋值给key),这里我们生成一个list,并赋值1,2,3,4,5,6,7,8,9,10,截取索引是0到5的值,重新赋值

127.0.0.1:6379> lpush l2 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> lrange l2 0 -1
 1) "10"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
127.0.0.1:6379> ltrim l2 0 5
OK
127.0.0.1:6379> lrange l2 0 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
6) "5"

 

  • lset key 索引 修改的值(修改list索引上的值),下边的例子将key是l1的索引0位置上的值修改为1

127.0.0.1:6379> lrange l1 0 -1
1) "6"
2) "7"
3) "8"
4) "9"
127.0.0.1:6379> lset l1 0 1
OK
127.0.0.1:6379> lrange l1 0 -1
1) "1"
2) "7"
3) "8"
4) "9"

 

  • linsert key before|after 已存在的值 要插入的值(大家都知道redis中的list的数据类型相当于java中的linkedlist,而linkedlist对元素的增加,删除的性能非常好,所以linsert是对list中指定的元素的前或后增加数据)

before的例子

127.0.0.1:6379> lrange l1 0 -1
1) "1"
2) "7"
3) "8"
4) "9"
127.0.0.1:6379> linsert l1 before 7 a
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "1"
2) "a"
3) "7"
4) "8"
5) "9"

after的例子

127.0.0.1:6379> linsert l1 after 8 b
(integer) 6
127.0.0.1:6379> lrange l1 0 -1
1) "1"
2) "a"
3) "7"
4) "8"
5) "b"
6) "9"

  • rpoplpush key1 key2 (把key1的第一个元素,删除并弹出,加入到key2的第一个元素中) 

127.0.0.1:6379> lrange l1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpoplpush l1 l2
"a"
127.0.0.1:6379> lrange l1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> lrange l2 0 -1
1) "a"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"

    这时小伙伴们会有疑问,rpoplpush命令,参数的两个key相同的话怎样,让我们来具体操作下

 127.0.0.1:6379> lrange l1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> rpoplpush l1 l1
"b"
127.0.0.1:6379> lrange l1 0 -1
1) "b"
2) "e"
3) "d"
4) "c"

    从执行结果能看出,是将list中的最后一个元素,移到最前面

 

  • brpoplpush key1 key2 等待时间(秒单位)(这里前边开头的b是blocking阻塞的意思,当key2中没有要移除的值,会一直阻塞在那里)

终端1

127.0.0.1:6379> keys *
1) "l3"
2) "l2"
3) "l1"
4) "l4"

127.0.0.1:6379> brpoplpush l5 l6 1000

 

终端2

127.0.0.1:6379> lpush l5 1 2 3 4 5
(integer) 5

这是终端1阻塞结束

127.0.0.1:6379> brpoplpush l5 l6 1000
"1"
(232.00s)

 

    list数据类型的基本操作,就介绍到这里。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值