Redis(五)—— List 列表类型详解

139 阅读2分钟

“这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

实例

将三个值插入名为 list 的列表的头部(左边): LPUSH

 127.0.0.1:6379> LPUSH list one
 (integer) 1
 127.0.0.1:6379> lpush list hello
 (integer) 2
 127.0.0.1:6379> lpush list hi  #最后存放的值下标为0
 (integer) 3
 127.0.0.1:6379> lrange list 0 1
 1) "hi"       #0  
 2) "hello"    #1
 127.0.0.1:6379> lrange list 0 -1 #查看列表中所有的值
 1) "hi"       #0
 2) "hello"    #1
 3) "one"      #2

将值插入名为 list 的列表的尾部(右边): RPUSH

 127.0.0.1:6379> rpush list right
 (integer) 4
 127.0.0.1:6379> lrange list 0 -1
 1) "hi"
 2) "hello"
 3) "one"
 4) "right"

取出 list 列表中的值: lpop rpop

 127.0.0.1:6379> lrange list 0 -1
 1) "hi"
 2) "hello"
 3) "one"
 4) "right"
 127.0.0.1:6379> lpop list #从列表的头部(左边)取出
 "hi"
 127.0.0.1:6379> rpop list #列表的尾部(右边)取出
 "right"
 127.0.0.1:6379> lrange list 0 -1 
 1) "hello"
 2) "one"
 127.0.0.1:6379> lindex list 0  #通过list下标获取值
 "hello"
 127.0.0.1:6379> lindex list 1
 "one"

返回列表长度 llen

 127.0.0.1:6379> lrange list 0 -1
 1) "hello"
 2) "one"
 3) "two"
 4) "three"
 127.0.0.1:6379> llen list
 (integer) 4

移除列表中指定个数的value lrem

 127.0.0.1:6379> lrange list 0 -1
 1) "hello"
 2) "one"
 3) "two"
 4) "three"
 5) "three"
 127.0.0.1:6379> lrem list 1 one  #移除list 中的一个 one
 (integer) 1
 127.0.0.1:6379> lrange list 0 -1
 1) "hello"
 2) "two"
 3) "three"
 4) "three"
 127.0.0.1:6379> lrem list 2 three  #移除list 中的两个 three
 (integer) 2
 127.0.0.1:6379> lrange list 0 -1
 1) "hello"
 2) "two"
 ​

截取列表中指定范围的值:截取后列表中只剩下被截取的内容 ltrim

 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello1"
 2) "hello2"
 3) "hello3"
 4) "hello4"
 5) "hello5"
 127.0.0.1:6379> ltrim mylist 1 2  #截取list 中[1,2]的值
 OK
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello2"
 2) "hello3"

把一个列表的value取出放入另一个列表 rpoplpush

 127.0.0.1:6379> lpush mylist hello1
 (integer) 3
 127.0.0.1:6379> rpush mylist hello4
 (integer) 4
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello1"
 2) "hello2"
 3) "hello3"
 4) "hello4"
 127.0.0.1:6379> rpoplpush mylist otherlist  #从右边(尾部)取出mylist的value,从左边(头部)放入otherlist,如果otherlist不存在则会创建
 "hello4"
 127.0.0.1:6379> rpoplpush mylist otherlist
 "hello3"
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello1"
 2) "hello2"
 127.0.0.1:6379> lrange otherlist 0 -1
 1) "hello3"
 2) "hello4"

替换列表中指定下标的值 lset

 127.0.0.1:6379> exists mylist  #判断列表是否存在
 (integer) 1  #存在
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hello1"
 2) "hello2"
 127.0.0.1:6379> lset mylist 0 hi  #替换列表中第一个值,如果第一个值不存在则报错
 OK
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hi"
 2) "hello2"

在列表的指定位置插入value,可以选择在某个值前面或者后面插入 linsert

 127.0.0.1:6379> lrange mylist 0 -1
 1) "hi"
 2) "hello2"
 #在mylist列表的hello2值前面插入hello1
 127.0.0.1:6379> linsert mylist before hello2 hello1  
 (integer) 3
 127.0.0.1:6379> lrange mylist 0 -1
 1) "hi"
 2) "hello1"
 3) "hello2"
 #在mylist列表的hello2值后面插入hello3
 127.0.0.1:6379> linsert mylist after hello2 hello3
 (integer) 4
 127.0.0.1:6379> lrange mylist 0 -1  #插入完成
 1) "hi"
 2) "hello1"
 3) "hello2"
 4) "hello3"
 ​
 ​

如果把链表中的值都移除,那么链表将不存在

 127.0.0.1:6379> lpop mylist
 (nil)
 127.0.0.1:6379> exists mylist
 (integer) 0

\