Redis的List(列表)基本API

87 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

list使用场景:可以把它用作成栈(lpush rpop左边进去 右边出来),队列,阻塞队列 ,消息排队,消息队列(lpush rpop)

所以的list命令都是以"l(L)"开头的

1 lpush lpush (list) (v1)(v2)(v3) 从左边一次性或者多次插入.也就是头部

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个新的list的list一次性添加三个值

(integer) 3 #返回当前这个list里面有几个元素

127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部)

1) "3"

2) "2"

3) "1"

127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1)

1) "3"

2) "2"

127.0.0.1:6379[2]> lrange list 0 2 #查看最后三个个元素(0,1,2)

1) "3"

2) "2"

3) "1"

127.0.0.1:6379[2]> lrange list 0 0 #查看最后一个元素

1) "3"

2 lrange Lrange key (index)(index) 获取指定区间的值,去如果是0,-1的话就是查看全部的 想要得到第一个元素使用0 0

127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部)

1) "3"

2) "2"

3) "1"

127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1)

1) "3"

2) "2"

127.0.0.1:6379[2]> lrange copylist 0 0  #查看第一个元素

1) "wyh4"

3 rpush r(right)push (list)(v1)(v2)(v3)从右边一次性或者多次插入.也就是尾部

127.0.0.1:6379[2]> rpush list four #给list从右边添加"four"这个元素

(integer) 4

127.0.0.1:6379[2]> rpush list five  #给list从右边添加"five"这个元素

(integer) 5

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的list

1) "3"

2) "2"

3) "1"

4) "four"

5) "five"

4 lpop lpop(list)从左边删除一个值

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list

(integer) 3 

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值

1) "3"

2) "2"

3) "1"

127.0.0.1:6379[2]> lpop list # 从左边删除一个值

"3"

127.0.0.1:6379[2]> rpop list #从右边删除一个值

"1"

127.0.0.1:6379[2]> lrange list 0 -1  #查看全部的值

1) "2"

5 rpop rpop(list)从右边删除一个值

127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list    

(integer) 3 

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值

1) "3"

2) "2"

3) "1"

127.0.0.1:6379[2]> lpop list # 从左边删除一个值

"3"

127.0.0.1:6379[2]> rpop list #从右边删除一个值

"1"

127.0.0.1:6379[2]> lrange list 0 -1  #查看全部的值

1) "2"

6 lindex index(list)(index) 通过下标获取值,注意,下标也是从0开始的

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值

1) "3"

2) "2"

3) "1"

4) "2"

127.0.0.1:6379[2]>  lindex list 0 #查看左边第一个值

"3"

127.0.0.1:6379[2]>  lindex list 1 #查看左边第二个值

"2"

7 llen llen(list) 查看元素的长度

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素

1) "3"

2) "2"

3) "1"

4) "2"

127.0.0.1:6379[2]> llen list #查看元素的长度

(integer) 4

8 lrem

lrem(list)(count)(value)移除几个什么样的元素(精确匹配)

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素

1) "3"

2) "2"

3) "1"

4) "2"

127.0.0.1:6379[2]> lrem list 1 1 #移除1个值为1的元素

(integer) 1 

127.0.0.1:6379[2]> lrem list 2 2  #移除2个值为2的元素

(integer) 2

127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素

1) "3"

9 ltrim ltrim(list)(index)(index)在java中是修剪,在redis是截取的意思,通过下标截取某一段key的元素,但是会改变这个list,只剩下我们要截取的元素

127.0.0.1:6379[2]> lpush list 1 2 3 4 5 #创建元素

(integer) 5

127.0.0.1:6379[2]> lrange list 0 -1 #查看元素

1) "5"

2) "4"

3) "3"

4) "2"

5) "1"

127.0.0.1:6379[2]> ltrim list 0 1 #截取key为list的元素,从第一位截取到第二位

OK

127.0.0.1:6379[2]> lrange list 0 -1 #查看元素

1) "5"

2) "4"

10 rpoplpush rpoplpush(list1)(list2) 移出列表的最后一个元素,将它移动到新的列表

127.0.0.1:6379[2]> rpush list wyh1 wyh2 wyh3 #创建一个listy一次性添加多个值

(integer) 3

127.0.0.1:6379[2]> rpoplpush list copylist #复制一个list命名为copylist 

"wyh3"

127.0.0.1:6379[2]> lrange copylist 0 -1 #查看copylist的元素

1) "wyh3"

127.0.0.1:6379[2]> lrange list 0 -1 #查看list的元素

1) "wyh1"

2) "wyh2"

11 exists exists(list) 判断list是否存在 存在返回1 不存在返回0

127.0.0.1:6379[2]> exists list #判断list这个列表是否存在

(integer) 1     #存在返回1 不存在返回0

127.0.0.1:6379[2]> exists list1 #判断list1这个列表是否存在

(integer) 0    #存在返回1 不存在返回0

12 lset lset(list)(index)(value) 相当于修改替换replace 将列表中指定下标的值替换成另外一个值,如果不存在会报错,存在会替换当前值

127.0.0.1:6379[2]> lset list 0 item #把list这个列表第0个下表的值替换成item

(error) ERR no such key #因为list这个列表不存在或者list这个列表没有值

127.0.0.1:6379[2]> lpush list value1 #给list这个列表进行赋值

(integer) 1

127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值

1) "value1"

127.0.0.1:6379[2]> lset list 0 item #将list这个列表中的下标为0的值替换成item

OK

127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值

1) "item"

127.0.0.1:6379[2]> lrange list 1 value2 #将list这个列表中的下标为1的值替换成value

(error) ERR value is not an integer or out of range ##因为llist这个列表没有下标为1的值

13 linsert linsert(key)(before前或者after后)(value)(value) 将某个具体的value插入列表中某个元素的前面或者后面,在list里面之前value位置(之前或者之后)插入另外一个value的元素

127.0.0.1:6379[2]> lpush list 1 2 3 #创建list集合

(integer) 3

127.0.0.1:6379[2]> linsert list before 2 0 #在list里面value为2之前插入一个value为0的元素

(integer) 4

127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素

1) "3"

2) "0"

3) "2"

4) "1"

127.0.0.1:6379[2]> linsert list after 2 0 #在list里面value为2之后插入一个value为0的元素

(integer) 5

127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素

1) "3"

2) "0"

3) "2"

4) "0"

5) "1"

list小结

1 list实际上是一个链表,before node after,left,right都可以插入值

2 如果插入的这个key不存在,需要创建一个新的链表

3 如果key存在,就在它的基础上新增内容

4 如果移出了key,所有的value都消失了,如果移除了所有值,空链表,也代表不存在

5 在两边插入或者改动值,效率最高,如果执行对中间元素的处理,效率会比较低