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的基本使用。
有好的建议。请在下方输入你的评论。