当前位置: 首页 > news >正文

Redis数据结构之List

目录

    • 1.概述
    • 2.常见操作
      • 2.1 LPUSH/RPUSH/LRANGE
      • 2.2 LPOP/RPOP
      • 2.3 LINDEX
      • 2.4 LLEN
      • 2.5 LREM
      • 2.6 LTRIM
      • 2.7 RPOPLPUSH
      • 2.8 LSET
      • 2.9 LINSERT

1.概述

  • List是简单的字符串列表,单key多个value,按照插入顺序排序。

在这里插入图片描述

  • 支持添加一个元素到列表的头部(左边)或者尾部(右边)

  • 它的底层实际是个双端链表,主要功能有push/pop等,用在栈,队列,消息队列等场景,left/right都可以插入添加,如果键不存在创建新的链表,键已存在,则新增内容,如果值全被移除了,对应的键也就消失了。

    双端链表两端操作的效率很高,通过索引下标的操作性能略有下降

在这里插入图片描述

  • 最多可以包含2³²-1个元素 (4294967295, 每个列表超过40亿个元素)。

2.常见操作

2.1 LPUSH/RPUSH/LRANGE

LPUSH将一个或多个值插入头部(左边),RPUSH是将一个或多个值插入尾部(右边)

案例:

127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush list2 1 2 3 4 5
(integer) 5

LRANGE从头部开始遍历,获取元素,下标从0开始,0到-1是全部遍历

案例:

127.0.0.1:6379> LRANGE list1 0 3
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> LRANGE list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

不存在RRANGE命令

2.2 LPOP/RPOP

LPOP,从左侧弹出(移除)元素,RPOP从右侧弹出元素,被弹出的元素会被返回。

127.0.0.1:6379> lrange list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lpop list1 
"5"
127.0.0.1:6379> lpop list1 
"4"
127.0.0.1:6379> lpop list1 
"3"
127.0.0.1:6379> lpop list1 
"2"
127.0.0.1:6379> lpop list1 
"1"
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpop list2
"5"
127.0.0.1:6379> rpop list2
"4"
127.0.0.1:6379> rpop list2
"3"
127.0.0.1:6379> rpop list2
"2"
127.0.0.1:6379> rpop list2
"1"

2.3 LINDEX

根据下标获取元素

127.0.0.1:6379> rpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lindex list1 0
"1"
127.0.0.1:6379> lindex list1 2
"3"

2.4 LLEN

元素个数,list.size();

127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> llen list1
(integer) 5

2.5 LREM

删除num个值是value的元素

lrem key num value

例:

127.0.0.1:6379> lpush list3 1 2 3 4 5 5 5 5 5 6 7 8
(integer) 12
127.0.0.1:6379> lrange list3 0 -1
 1) "8"
 2) "7"
 3) "6"
 4) "5"
 5) "5"
 6) "5"
 7) "5"
 8) "5"
 9) "4"
10) "3"
11) "2"
12) "1"
127.0.0.1:6379> lrem list3 2 5
(integer) 2
127.0.0.1:6379> lrange list3 0 -1
 1) "8"
 2) "7"
 3) "6"
 4) "5"
 5) "5"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"

2.6 LTRIM

截取指定范围的值后再赋给key

LTRIM key start end

例:

127.0.0.1:6379> rpush list1 1 2 3 4 5 6 
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> LTRIM list1 3 5
OK
127.0.0.1:6379> lrange list1 0 -1
1) "4"
2) "5"
3) "6"

2.7 RPOPLPUSH

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

RPOPLPUSH key source target

例:

127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lrange list2 0 -1
1) "5"
2) "6"
3) "7"
4) "8"
127.0.0.1:6379> rpoplpush list1 list2
"4"
127.0.0.1:6379> lrange list1 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"

2.8 LSET

设置某个下标的值

LSET key index value

例:

127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"
127.0.0.1:6379> lset list2  3 abc
OK
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "5"
3) "6"
4) "abc"
5) "8"

2.9 LINSERT

在某个已有值existValue前或后加个新的值newValue

LINSERT key before|after existValue newValue

例:

127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "5"
3) "6"
4) "abc"
5) "8"
127.0.0.1:6379> LINSERT list2 before abc def
(integer) 6
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "5"
3) "6"
4) "def"
5) "abc"
6) "8"

http://www.dtcms.com/a/113091.html

相关文章:

  • 重生之我是去噪高手——diffusion model
  • 第三十章:Python-NetworkX库:创建、操作与研究复杂网络
  • 复古千禧Y2风格霓虹发光酸性镀铬金属短片音乐视频文字标题动画AE/PR模板
  • 15.1linux设备树下的platform驱动编写(知识)_csdn
  • 简单程序语言理论与编译技术·22 实现一个从AST到RISCV的编译器
  • HarmonyOS应用开发者高级-编程题-001
  • keil软件仿真
  • java高并发------线程的六种状态
  • 蓝桥云客--破译密码
  • CUDA学习--体验GPU性能
  • 【Linux学习笔记】初识进程概念和进程PCB
  • FreeRTOS的空闲任务
  • 【2022】【论文笔记】太赫兹量子阱——
  • opencv的加、减、溶合、位运算
  • Kafka 中,为什么同一个分区只能由消费者组中的一个消费者消费?
  • 文章记单词 | 第24篇(六级)
  • 【MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南】
  • Redis的公共操作命令
  • 探秘AI(003)之“通义AI”全栈AI能力引领智能化变革
  • 2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
  • 安装gpu版本的dgl
  • Python解决“组成字符串ku的最大次数”问题
  • Airflow+Spark/Flink vs. Kettle
  • (一)前端程序员转安卓开发分析和规划建议
  • Dify票据识别遇到的分支判断不准确问题
  • 破解GenAI时代工业物联网落地难题:研华IoTSuite如何用“全栈技术“重构智造未来?
  • Roo Code使用MCP服务(大模型上下文协议)
  • 深度学习处理文本(13)
  • SSL证书过期会有什么影响
  • 奈氏准则和 香农定理