乐趣区

关于redis:redis-五redis之List

redis 系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…
公众号:雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!

一、List 概述

Redis 列表是简略的字符串列表,依照插入程序排序。你能够增加一个元素到列表的头部(右边)或者尾部(左边)

一个列表最多能够蕴含 232 – 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。

list 能够了解为一个通道,能够右边进,也能够左边进。

16293521471.png

依据上边的通道,也能够变体为俩种形式:

  1. 左进右出:队列
  2. 左进左出:桶

二、List 分类

依据集体了解和便于学习,集体进行了 list 命令的分类!
依据命令性质分为:

  1. 增:减少 list 数据
  2. 删:删除 list 数据
  3. 改:批改 list 数据
  4. 查:查问 list 数据

1. List 中的增

  1. lpush:右边推动一个或多个值
  2. lpushx 右边推动一个值,列表不存在时,有效
  3. rpush:左边推动一个或多个值
  4. rpushx:左边推动一个值,列表不存在时,有效
  5. linsert:在某一个值的前边或者后边插入一个值

2. List 中的删

  1. lrem:移除指定值,反复值依据指定数量进行移除
  2. lpop:头部弹出一个值
  3. rpop:右部弹出一个值
  4. blpop:阻塞弹出头部一个值,如果没有值,则期待有值或超时
  5. brpop:阻塞弹出尾部一个值,如果没有值,则期待有值或超时
  6. rpoplpush:尾部弹出一个值,并把该值压入到新的列表头部
  7. brpoppush:阻塞弹出一个值,并把该值压入到新的列表头部,如果没有值,则期待有值或超时

3. List 中的改

  1. lset:依据下标,进行批改值
  2. ltrim:截取列表值(区间范畴内,定位值)

4. List 中的查

  1. llen:查问列表长度
  2. lindex:依据下标进行获取某一个值
  3. 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 为已存在的列表增加值
退出移动版