零基础学习Redis(8) -- list类型命令使用

list相当于一个顺序表。

1. list常用命令

1. lpush / rpush

lpush key value1 value2 ...

rpush key value1 value2..

lpush(left push)从左边插入元素,头插;rpush(right push)从右边插入元素,尾插

两者都会返回插入后的列表长度,并且插入一个元素的时间复杂度都是O(1)

2. lrange

lrange key start stop

lrange(list range)查询列表区间的元素,注意是闭区间,支持使用负数下标:

如果区间超出范围会返回区间内存在的元素,不存在元素返回空列表:

3. lpushx / rpushx

lpushx key value1 value2 ...

rpushx key value1 value2..

和lpush / rpush使用方法相同,不过只有列表中存在元素时才会成功

4. lpop / rpop

lpop key [count]

rpop key [count]

lpop(left pop) 头删,rpop(right pop)尾删。

count 代表要删除的数量,不写则默认删除一个,删除后会返回被删除的值:

5. lindex

lindex key index

lindex(list index)查询指定下标的元素,如果下标不存在返回nil,时间复杂度为O(N):

6. linsert

linsert <before | after> pivot element

linsert(list insert)在列表中第一个值为pivot元素的前面或后面插入元素element ,返回插入后列表的长度,时间复杂度为O(N):

7. llen

llen key

llen(list length)查询列表中的元素个数:

8. lrem

lrem key count element

lrem(list remove) 删除列表中的element,当count 等于0删除全部的element,大于0时从左往右删count个,小于0时从右往左删-count个:

9. ltrim

ltrim key start stop

保留start 到 stop区间内的元素:

10. lset

lset key index element

修改index下标下的元素为element,下标存在才能执行成功

11. blpop / brpop

blpop key1 key2 timeout

brpop key1 key2 timeout

功能和lpop / rpop类似,从一个或多个key中头删/尾删一个元素,并且带有阻塞功能,当列表中没有元素时会阻塞等待,直到超时时间或者列表中被添加了元素:

有元素会立即返回,key和对应的数据,超过设置时间则返回nil:

使用blpop和brpop不会阻塞redis线程。

2. 内部编码

前面我们介绍时说的的使用 ziplist 和 linkedList,实际上5.多版本使用的是quicklist,quicklist,本质上还是一个链表,但是每个节点都是一个ziplist,节点的大小可以通过修改redis.conf文件来调整,当某个点大小超过设置大小就会分裂为两个节点:

可以看到默认是 -2 ,通过上面注释可以直到每个节点超过8kb就会分裂

3. 应用场景

  1. 用作数组,存储一些同类的数据,例如一个班级的学生

  2. 用作阻塞队列,使用brpop/blpop/lpush/rpush可以很简单的模拟一个生产者消费者模型

  3. 用于分页查询,使用lrange命名可以指定查询的范围区间

相关推荐
z***75157 分钟前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
麦兜*9 分钟前
Redis内存消耗异常飙升?深入排查与Big Key/Hot Key的根治方案
jvm·数据库·spring boot·redis·spring·缓存
成为你的宁宁37 分钟前
【Redis 从入门到实战:详细讲解 Redis 安装配置、RDB/AOF 数据持久化方案、一主两从同步部署,深入剖析哨兵模式工作原理与哨兵模式高可用全攻略】
数据库·redis·缓存
云和数据.ChenGuang39 分钟前
r=re.search(r‘data-original=“(.*?)“‘, line)指令解析
数据库·mysql·r语言
v***5651 小时前
使用bitnamiredis-sentinel部署Redis 哨兵模式
数据库·redis·sentinel
Q***f6351 小时前
后端消息队列学习资源,RabbitMQ+Kafka
学习·kafka·rabbitmq
2501_941111821 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
循环过三天1 小时前
7.7、Python-常用内置函数
笔记·python·学习
m***11902 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
烤麻辣烫2 小时前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则