四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)
@
目录
- [四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)](#四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用))
- [2. list 列表常用指令(详细讲解说明)](#2. list 列表常用指令(详细讲解说明))
- [2.1
lpush/rpush <key><value1><value2><value3> ....
从左边/右边插入一个或多个值](#2.1 lpush/rpush <key><value1><value2><value3> .... 从左边/右边插入一个或多个值) - [2.2
lrange <key><start><stop>
按照索引下标获得元素(从左到右)](#2.2 lrange <key><start><stop> 按照索引下标获得元素(从左到右)) - [2.3
lpop/rpop <key>
从左边/右边吐出一个值,那么对应的 list 对象里的值也是少了一个了](#2.3 lpop/rpop <key> 从左边/右边吐出一个值,那么对应的 list 对象里的值也是少了一个了) - [2.4
rpoplpush <key1><key2>从<key1>
列表右边吐出一个值,插到<key2>
列表左边](#2.4 rpoplpush <key1><key2>从<key1> 列表右边吐出一个值,插到<key2>列表左边) - [2.5
lrange mylist 0 -1
0 左边第一个,-1 右边第一个,(0-1 表示获取所有)](#2.5 lrange mylist 0 -1 0 左边第一个,-1 右边第一个,(0-1 表示获取所有)) - [2.6
lindex <key><index>
按照索引下标获得元素(从左到右)](#2.6 lindex <key><index> 按照索引下标获得元素(从左到右)) - [2.7
llen <key>
获得列表长度](#2.7 llen <key>获得列表长度) - [2.8
linsert <key> before <value><newvalue>
在<value>
的前面插入<newvalue>
插入值](#2.8 linsert <key> before <value><newvalue>在<value>的前面插入<newvalue>插入值) - [2.9
linsert <key> atfore <value><newvalue>
在<value>
的后面插入<newvalue>
插入值](#2.9 linsert <key> atfore <value><newvalue>在<value>的后面插入<newvalue>插入值) - [2.10
lrem <key><n><value>
从左边删除 n 个 value(从左到右)](#2.10 lrem <key><n><value>从左边删除 n 个 value(从左到右)) - [2.11
lset<key><index><value>
将列表 key 下标为 index 的值替换成 value](#2.11 lset<key><index><value> 将列表 key 下标为 index 的值替换成 value)
- [2.1
- [3. list 对象的应用场景](#3. list 对象的应用场景)
- [4. 最后:](#4. 最后:)
list :一句话: list 类型, 保存多个数据,底层使用双向链表存储结构实现 。
list 存储结构示意图:
双向链表示意图:

示意图:说明:
- Redis 列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 底层是个双向链表,对两端的操作性能高,通过索引下标的操作中间的节点性能较差。
- 关于更多双向链表的内容,大家可以移步至:🌟🌟🌟 双向循环带头节点链表 ------ C语言_双向循环节点-CSDN博客
关于 list 列表的命令,在 Redis 当中有如下这些:
这里我们介绍一些 list 列表比较常用的一些命令,然后,举一反三,根据文档也可以对其它的命令上手学习使用了 。
2. list 列表常用指令(详细讲解说明)
2.1 lpush/rpush <key><value1><value2><value3> ....
从左边/右边插入一个或多个值

注意:同时是会创建一个 list 对象的
sh
127.0.0.1:6379> lpush k9 "a" "b" "c"


sh
127.0.0.1:6379> rpush k10 "a" "b" "c"

2.2 lrange <key><start><stop>
按照索引下标获得元素(从左到右)

注意:
lreage list 0 -1
就是获取到该 list 的从开头到结尾的全部内容了。
sh
127.0.0.1:6379> lrange k10 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange k10 0 1

2.3 lpop/rpop <key>
从左边/右边吐出一个值,那么对应的 list 对象里的值也是少了一个了

sh
127.0.0.1:6379> lpop k9

注意: 列表的头元素。 当
key
不存在时,返回nil
。


2.4 rpoplpush <key1><key2>从<key1>
列表右边吐出一个值,插到<key2>
列表左边

sh
127.0.0.1:6379> rpoplpush k9 k10

2.5 lrange mylist 0 -1
0 左边第一个,-1 右边第一个,(0-1 表示获取所有)
2.6 lindex <key><index>
按照索引下标获得元素(从左到右)

sh
127.0.0.1:6379> lindex k10 1

2.7 llen <key>
获得列表长度

sh
127.0.0.1:6379> llen k10

2.8 linsert <key> before <value><newvalue>
在<value>
的前面插入<newvalue>
插入值

sh
127.0.0.1:6379> linsert k9 before "b" "tom"

2.9 linsert <key> atfore <value><newvalue>
在<value>
的后面插入<newvalue>
插入值
sh
127.0.0.1:6379> linsert k9 after "b" "jack"

2.10 lrem <key><n><value>
从左边删除 n 个 value(从左到右)


sh
127.0.0.1:6379> lrem k9 1 "b"


2.11 lset<key><index><value>
将列表 key 下标为 index 的值替换成 value


注意: 当
index
参数超出范围,或对一个空列表(key
不存在)进行 LSET 时,返回一个错误。

3. list 对象的应用场景
redis 当中 list 对象 应用于具有操作先后顺序的数据控制
- 系统通知,按照时间顺序展示,将最近的通知列在前面。

- 其它,比如微信的最近转发,微博的最新关注等。
4. 最后:
"在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。"