redis 系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…
公众号:雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!
一、List 概述
Redis 列表是简略的字符串列表,依照插入程序排序。你能够增加一个元素到列表的头部(右边)或者尾部(左边)
一个列表最多能够蕴含 232 – 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。
list 能够了解为一个通道,能够右边进,也能够左边进。
16293521471.png
依据上边的通道,也能够变体为俩种形式:
- 左进右出:队列
- 左进左出:桶
二、List 分类
依据集体了解和便于学习,集体进行了 list 命令的分类!
依据命令性质分为:
- 增:减少 list 数据
- 删:删除 list 数据
- 改:批改 list 数据
- 查:查问 list 数据
1. List 中的增
- lpush:右边推动一个或多个值
- lpushx 右边推动一个值,列表不存在时,有效
- rpush:左边推动一个或多个值
- rpushx:左边推动一个值,列表不存在时,有效
- linsert:在某一个值的前边或者后边插入一个值
2. List 中的删
- lrem:移除指定值,反复值依据指定数量进行移除
- lpop:头部弹出一个值
- rpop:右部弹出一个值
- blpop:阻塞弹出头部一个值,如果没有值,则期待有值或超时
- brpop:阻塞弹出尾部一个值,如果没有值,则期待有值或超时
- rpoplpush:尾部弹出一个值,并把该值压入到新的列表头部
- brpoppush:阻塞弹出一个值,并把该值压入到新的列表头部,如果没有值,则期待有值或超时
3. List 中的改
- lset:依据下标,进行批改值
- ltrim:截取列表值(区间范畴内,定位值)
4. List 中的查
- llen:查问列表长度
- lindex:依据下标进行获取某一个值
- lrange:依据下标范畴获取 list 列表
三、命令实际
依据分类,进行命令操作
1. List 中的增
127.0.0.1:6379> keys *
(empty list or set)
# 右边推动俩个值
127.0.0.1:6379> lpush lists one two
(integer) 2
127.0.0.1:6379> lrange lists 0 -1
1) "two"
2) "one"
# 左边推动俩个值
127.0.0.1:6379> rpush lists three four
(integer) 4
127.0.0.1:6379> lrange lists 0 -1
1) "two"
2) "one"
3) "three"
4) "four"
# 右边推动一个值,仅反对一个
127.0.0.1:6379> lpushx lists five
(integer) 5
127.0.0.1:6379> lrange lists 0 -1
1) "five"
2) "two"
3) "one"
4) "three"
5) "four"
# 左边推动一个值,仅反对一个
127.0.0.1:6379> rpushx lists sex
(integer) 6
127.0.0.1:6379> lrange lists 0 -1
1) "five"
2) "two"
3) "one"
4) "three"
5) "four"
6) "sex"
# 在某一个值的前边或后边进行插入值
127.0.0.1:6379> linsert lists after three zero
(integer) 7
127.0.0.1:6379> lrange lists 0 -1
1) "five"
2) "two"
3) "one"
4) "three"
5) "zero"
6) "four"
7) "sex"
127.0.0.1:6379>
2. List 中的删
127.0.0.1:6379> keys *
1) "lists"
127.0.0.1:6379> lrange lists 0 -1
1) "five"
2) "two"
3) "one"
4) "three"
5) "zero"
6) "four"
7) "sex"
# 头部弹出一个值
127.0.0.1:6379> lpop lists
"five"
127.0.0.1:6379> lrange lists 0 -1
1) "two"
2) "one"
3) "three"
4) "zero"
5) "four"
6) "sex"
# 尾部弹出一个值
127.0.0.1:6379> rpop lists
"sex"
127.0.0.1:6379> lrange lists 0 -1
1) "two"
2) "one"
3) "three"
4) "zero"
5) "four"
# 头部阻塞弹出 two 值,没有 two 则取第一个值,如列表没值则返回 nil
127.0.0.1:6379> blpop lists two 3
1) "lists"
2) "two"
127.0.0.1:6379> lrange lists 0 -1
1) "one"
2) "three"
3) "zero"
4) "four"
127.0.0.1:6379> blpop lists two 3
1) "lists"
2) "one"
127.0.0.1:6379> lrange lists 0 -1
1) "three"
2) "zero"
3) "four"
# 创立一个新的列表
127.0.0.1:6379> lpush lists2 aa
(integer) 1
# 头部阻塞弹出 two 值,没有 aa 则取第一个值,如列表没值则返回 nil
127.0.0.1:6379> blpop lists2 aa 3
1) "lists2"
2) "aa"
127.0.0.1:6379> blpop lists2 aa 3
(nil)
(3.10s)
127.0.0.1:6379> lrange lists 0 -1
1) "zero"
2) "four"
127.0.0.1:6379> lrange lists2 0 -1
(empty list or set)
# 尾部弹出,并压入新的列表头部
127.0.0.1:6379> rpoplpush lists lists2
"four"
127.0.0.1:6379> lrange lists 0 -1
1) "zero"
127.0.0.1:6379> lrange lists2 0 -1
1) "four"
# 阻塞,尾部弹出,并压入新的列表头部
127.0.0.1:6379> brpoplpush lists lists2 3
"zero"
127.0.0.1:6379> lrange lists 0 -1
(empty list or set)
127.0.0.1:6379> lrange lists2 0 -1
1) "zero"
2) "four"
127.0.0.1:6379> brpoplpush lists lists2 3
(nil)
(3.04s)
# 移除指定值
127.0.0.1:6379> lrem lists2 1 zero
(integer) 1
127.0.0.1:6379> lrange lists2 0 -1
1) "four"
127.0.0.1:6379>
3. List 中的改
# 创立 lists,并赋予值
127.0.0.1:6379> lpush lists one two three four five sex
(integer) 6
127.0.0.1:6379> lrange lists 0 -1
1) "sex"
2) "five"
3) "four"
4) "three"
5) "two"
6) "one"
# 截取 list,范畴位 [1,4]
127.0.0.1:6379> ltrim lists 1 4
OK
127.0.0.1:6379> lrange lists 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
# 依据下标进行设置值
127.0.0.1:6379> lset lists 0 "hello world"
OK
127.0.0.1:6379> lrange lists 0 -1
1) "hello world"
2) "four"
3) "three"
4) "two"
127.0.0.1:6379>
4. List 中的查
127.0.0.1:6379> lrange lists2 0 -1
1) "four"
127.0.0.1:6379> llen lists2
(integer) 1
127.0.0.1:6379> lindex lists2 0
"four"
127.0.0.1:6379> lrange lists2 0 -1
1) "four"
127.0.0.1:6379>
附录
下表列出了列表相干的根本命令:
序号 | 命令及形容 | |
---|---|---|
1 | [BLPOP key1 key2] timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到期待超时或发现可弹出元素为止。 | |
2 | [BRPOP key1 key2] timeout 移出并获取列表的最初一个元素,如果列表没有元素会阻塞列表直到期待超时或发现可弹出元素为止。 | |
3 | BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到期待超时或发现可弹出元素为止。 | |
4 | LINDEX key index 通过索引获取列表中的元素 | |
5 | LINSERT key BEFORE | AFTER pivot value 在列表的元素前或者后插入元素 |
6 | LLEN key 获取列表长度 | |
7 | LPOP key 移出并获取列表的第一个元素 | |
8 | [LPUSH key value1 value2] 将一个或多个值插入到列表头部 | |
9 | LPUSHX key value 将一个值插入到已存在的列表头部 | |
10 | LRANGE key start stop 获取列表指定范畴内的元素 | |
11 | LREM key count value 移除列表元素 | |
12 | LSET key index value 通过索引设置列表元素的值 | |
13 | LTRIM key start stop 对一个列表进行修剪 (trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | |
14 | RPOP key 移除列表的最初一个元素,返回值为移除的元素。 | |
15 | RPOPLPUSH source destination 移除列表的最初一个元素,并将该元素增加到另一个列表并返回 | |
16 | [RPUSH key value1 value2] 在列表中增加一个或多个值 | |
17 | RPUSHX key value 为已存在的列表增加值 |