Redis重制(五)list类型

22 阅读3分钟

这里我们来学习redis的第二个数据类型:list

 

List是一个基本的数据类型,在redis里边,这个玩意儿可玩性就比较高了。可以作为栈,队列,阻塞队列使用。

 

列表一般用来存储有序的字符串元素,如消息队列、最新消息列表等。

 

1:lpush 在列表左边增加值

127.0.0.1:6379> lpush list1 hello world camellia       # 批量添加元素到list中
(integer) 3
127.0.0.1:6379> lrange list1 0 -1                             # 获取list所有值
1) "camellia"
2) "world"
3) "hello"

 

2:rpush在列表右边增加值

127.0.0.1:6379> rpush list1 right-hello right-world         # 在列表尾部批量添加元素
(integer) 5
127.0.0.1:6379> lrange list1 0 -1                                    # 获取list所有值
1) "camellia"
2) "world"
3) "hello"
4) "right-hello"
5) "right-world"

 

3:lrange 获取值(同string用法)

127.0.0.1:6379> lpush list1 hello world camellia       # 批量添加元素到list中
(integer) 3
127.0.0.1:6379> lrange list1 0 -1                             # 获取list所有值
1) "camellia"
2) "world"
3) "hello"

 

4:lpop 从左侧移除列表指定个数元素

127.0.0.1:6379> lrange list1 0 -1                                    # 获取list所有值
1) "camellia"
2) "world"
3) "hello"
4) "right-hello"
5) "right-world"
127.0.0.1:6379> lpop list1 2                                    # 从左侧移除两个元素
1) "camellia"
2) "world"
127.0.0.1:6379> lrange list1 0 -1                             # 元素没了
1) "hello"
2) "right-hello"
3) "right-world"

 

5:rpop从右侧移除列表指定个数元素

127.0.0.1:6379> lrange list1 0 -1                     
1) "hello"
2) "right-hello"
3) "right-world"
127.0.0.1:6379> rpop list1 1
1) "right-world"
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "right-hello"

 

6:lindex通过下标获取list中的某一个值

127.0.0.1:6379> lindex list1 1
"right-hello"
127.0.0.1:6379> lindex list1 0
"hello"
127.0.0.1:6379> lindex list1 2             # 指定下标没有值返回null
(nil)

 

7:llen获取list长度

127.0.0.1:6379> llen list1
(integer) 2

 

8:lrem移除指定的值

Lrem key count element

127.0.0.1:6379> lpush list1 hello world camellia
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "world"
3) "hello"
4) "hello"
5) "right-hello"
127.0.0.1:6379> lrem list1 1 hello
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "world"
3) "hello"
4) "right-hello"
127.0.0.1:6379> lpush list1 hello
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "camellia"
3) "world"
4) "hello"
5) "right-hello"
127.0.0.1:6379> lrem list1 2 hello
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "world"
3) "right-hello"

 

9:ltrim截取list中的值

Ltrim key start end

127.0.0.1:6379> lrange list1 0 -1               # 查看list值
1) "camellia"
2) "world"
3) "hello"
4) "camellia"
5) "world"
6) "right-hello"
127.0.0.1:6379> ltrim list1 1 3                   #  截取数据值
OK
127.0.0.1:6379> lrange list1 0 -1               # 查看list
1) "world"
2) "hello"
3) "camellia"

 

10:rpoplpush  移除列表右边的第一个元素并添加至另一个list

127.0.0.1:6379> rpoplpush list1 list2
"camellia"
127.0.0.1:6379> lrange list1 0 -1
1) "world"
2) "hello"
127.0.0.1:6379> lrange list2 0 -1
1) "camellia"

这是一个组合操作,list1最右侧的数据弹出,放入倒list2中

 

11:lset设置(替换)指定下标设置list的值

如果列表不存在会报错

127.0.0.1:6379> lrange list1 0 -1                      # 获取列表值
1) "camellia"
2) "world"
3) "hello"
4) "world"
5) "hello"
127.0.0.1:6379> lset list1 1 xxx                         # 替换下标为1的值
OK
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "xxx"
3) "hello"
4) "world"
5) "hello"

 

12:linsert 在指定元素前边/后边插入值

127.0.0.1:6379> linsert list1 before xxx ccc               # 在xxx元素前添加元素ccc
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "ccc"
3) "xxx"
4) "hello"
5) "world"
6) "hello"
127.0.0.1:6379> linsert list1 after xxx afters              # 在xxx元素后边添加元素afters
(integer) 7
127.0.0.1:6379> lrange list1 0 -1
1) "camellia"
2) "ccc"
3) "xxx"
4) "afters"
5) "hello"
6) "world"
7) "hello"

 

13:blpop命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。(阻塞队列)

127.0.0.1:6380> lrange list1 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6380> blpop list1 100
1) "list1"
2) "g"
127.0.0.1:6380> blpop list1 100
1) "list1"
2) "f"
127.0.0.1:6380> blpop list1 100
1) "list1"
2) "e"
127.0.0.1:6380> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6380>

小结:

List实际上是一个链表,left/right都可以插入值。

如果key不存在,创建新的链表

如果key存在,新增内容

如果移除了所有值,空链表,也代表不存在!

在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~

 

以上大概就是list的基本使用。

 

有好的建议。请在下方输入你的评论。