Redis中List数据类型的常见命令

一.List类型(头尾能高效插入,删除)

1.基本介绍

⭐Redis中list是一个双端队列,从两头插入/删除都高效

1)搭配使用rpush和lpop,相当于队列(先进先出)

2)搭配使用rpush和rpop,相当于栈(先进后出)

列表(List)特点:

①列表元素有序:A->B≠B->A

②区分获取命令(lindex)和删除命令(lrem)

③列表中的元素是允许重复的 (hash里的field是不能重复的)

2.List命令:

①: lpush命令:将一个或多个元素头插到list中

语法: lpush key element element... --->返回list的长度

例:lpush key 1 2 3 4 ---> 4,3,2,1

注:列表可存多种数据类型的数据,但这些数据只能是同一种数据类型

②: lrange命令:查看list中指定范围内的元素,区间:前闭后闭

语法: lrange key start stop --->返回范围内所有元素

例: lrange key 0 -1 --->4,3,2,1

③: lpushx命令:当key存在,则头插到list中,若不存在,则直接返回

语法: lpushx key element element... --->返回list长度

④: rpush命令:尾插

语法: rpush key element element...

例: rpush key 1 2 3 4 --->1,2,3,4

⑤: rpushx命令:当key存在,则尾插,不存在,则直接返回

语法:rpushx key element element...

⑥: lpop命令:头删

语法:lpop key ---返回删的元素 或者 nil(当key不存在,或则删到key没有值时返回)

⑦: rpop命令:尾删

语法:rpop key count

在redis6.2及以上才能用这个count

⑧: lindex命令:获取从左往右数第index个元素(根据下标获取元素)

语法: lindex key index --->返回这个元素,若下表非法,则返回nil

⑨: linsert命令:插入元素在privot(基准值)前/后位置

语法: linsert key before/after privot element -->返回新列表长度

注:当基准值有多个(重复时),则从左往右找的第一个基准值时插入

⑩ llen命令:获取list长度

语法:llen key --->返回值:存在返回list长度,不存在返回0

⑪. lrem命令:删除list元素

语法: lrem key count element -->返回被删除的元素个数

count:要删元素个数

element:要删元素

当count>0时:从左往右删

当count<0时,从右往左删

当count=0时,删除list中全部element值

⑫: ltrim命令:保留区间元素,其他的删了

语法: ltrim key start stop -->返回OK

⑬: lset命令:根据下标修改元素

语法: lset key index element

index:要修改元素的下标

element:修改值

注:下标越界会报错

⑭.阻塞版本命令: blpop和brpop

语法:blpop key key .. timeout -->返回key+弹出最左侧第一个元素

brpop同理

此处可指定一个或多个key;每个key对应一个list.若这些list有任何一个非空,blpop可立即返回,若都为空,就阻塞timeout等待,直到其他redis客户端往list中插入元素

①若list中存在元素,blpop和brpop与lpop和rpop作用完全相同

②若list中为空,blpop和brpop则残生阻塞,直到阻塞到队列不为空为止(及其他客户端set新的key)

注:redis 中的list也相当阻塞队列一样,但redis里的list无容量上限,所以只需要考虑"出队阻塞",而不用考虑"入队阻塞" .同一个客户端 绝对不能 自己阻塞自己、再自己解除阻塞!必须用 另一个客户端 去操作 key,才能解除阻塞!阻塞版会根据timeout,阻塞一段时间,期间redis仍可以执行其他命令

⑮ list小结:

1` lpush 2`lrange 3`lpushx 4`rpush 5`rpushx 6`lpop 7`rpop 8` lindex 9`linsert 10` llen 11` lrem 12`ltrim 13`lset 14`blpop和brpop

4.list内部编码**(可用object encoding key命令来查看类型)**

quicklist:相当于压缩列表和链表的结合

5.list应用场景

①用list作数组这样的结构,存储多个元素

②作消息队列(先进先出)

③Redis分频道阻塞消息队列模型

④微博Timeline

相关推荐
哈__13 分钟前
面向AI智能体的数据库专业技能包:将DBA工程经验封装为可调用能力
数据库·人工智能·dba
阿坤带你走近大数据16 分钟前
SQL里where后面的1=1是干嘛的,走的是什么索引
数据库·sql
阿坤带你走近大数据16 分钟前
SQL的执行顺序和书写顺序的介绍
数据库·sql·oracle
Poo_Chai1 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
这个DBA有点耶2 小时前
从DBA到数据架构师(五):数据架构演进中的技术债务管理
数据库·程序人生·云原生·架构·dba·数据库管理员
天疆说2 小时前
01 硬件选型与 llama.cpp 部署:4× RTX 5880 Ada 跑 DeepSeek-V4-Flash
java·redis·llama
Bruce_Liuxiaowei2 小时前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
码农颜2 小时前
5.6.2 ⾏级锁死锁
数据库·sql·oracle
嘟嘟07173 小时前
Next.js 博客左侧笔记列表是怎么从 Redis 渲染出来的?从组件、children 到动态路由一次讲清
redis·react.js·前端工程化
ChaHae-In3 小时前
MyBatis动态SQL与MyBatis-Plus高效开发指南
数据库·oracle·mybatis