redis | 五、redis之List

redis系列文章:
https://liudongdong.top/categ...
本篇来源:
https://liudongdong.top/archi...
公众号:雨中散步撒哈拉
备注:欢迎关注公众号,一起学习,共同进步!
一、List概述
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
list可以理解为一个通道,可以左边进,也可以右边进。
redis | 五、redis之List
文章图片

16293521471.png
根据上边的通道,也可以变体为俩种方式:
  1. 左进右出:队列
  2. 左进左出:桶
二、List分类
【redis | 五、redis之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 为已存在的列表添加值

    推荐阅读