数据类型与API(3)List

简介: List (列表)特点• 有序• 可以重复• 左右两边插入弹出


List (列表)



特点

  • 有序
  • 可以重复
  • 左右两边插入弹出

image.png


常用命令

命令 含义 时间复杂度
lrange 获取列表指定索引范围的所有item O(S+N),S 为偏移量 start,N 为指定区间内元素的数量。
lpush、rpush 从列表左/右侧插入1-N个值 O(1)
lpop、rpop 从列表左/右侧弹出1个值 O(1)
linsert 在list指定的值前/后插入newValue O(N), N 为寻找 pivot 过程中经过的元素数量。
lrem 从列表中删除value相等的项 O(N), N 为列表的长度。
ltrim 按照索引范围修剪列表 O(N),N 为被移除的元素的数量。
lindex 获取列表指定索引的item O(N), N 为到达下标 index 过程中经过的元素数量。因此,对列表的头元素和尾元素执行 LINDEX 命令,复杂度为O(1)。
llen 获取列表长度 O(1)
lset 设置列表指定索引值为newValue 对头元素或尾元素进行 LSET 操作,复杂度为 O(1)。其他情况下,为 O(N), N 为列表的长度。


lrange

  • lrange key start end (获取列表指定索引范围的所有item(包含start和end))

a - b - c - d - e - f

索引从左到右 0 ~ 5

索引从右到左 -1 ~ -6

127.0.0.1:6379> rpush listkey a b c d e f
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lrange listkey 0 2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange listkey 1 -2
1) "b"
2) "c"
3) "d"
4) "e"


lpush、rpush

  • lpush key value1 value2 value3 ... (从列表左侧插入1-N个值)
  • rpush key value1 value2 value3 ... (从列表右侧插入1-N个值)
127.0.0.1:6379> lpush listkey c b a
(integer) 3
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpush listkey c b a
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"


lpop、rpop

  • lpop key (从列表左侧弹出一个item)
  • rpop key (从列表右侧弹出一个item)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"


linsert

  • linsert key before|after value newValue (在list指定的值前|后插入newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
127.0.0.1:6379> linsert listkey before b 0
(integer) 5
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "c"
5) "b"
127.0.0.1:6379> linsert listkey after c 1
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"


lrem

  • lrem key count value (根据count的值,从列表中删除value相等的项)
(1) count>0,从左到右,删除最多count个value相等的项(2) count<0,从右到左,删除最多abs(count)个value相等的项(3) count=0,从左到右,删除所有value相等的项
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"
127.0.0.1:6379> lrem listkey 1 b
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "c"
5) "b"
127.0.0.1:6379> lrem listkey -1 c
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "b"


ltrim

  • ltrim key start end (按照索引范围修剪列表)
127.0.0.1:6379> lrange listkey 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"
127.0.0.1:6379> ltrim listkey 1 3
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "a"
3) "a"


lindex

  • lindex key index (获取列表指定索引的item)


llen

  • llen key (获取列表长度)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lindex listkey 0
"a"
127.0.0.1:6379> lindex listkey -1
"f"
127.0.0.1:6379> llen listkey
(integer) 6


lset

  • lset key index newValue (设置列表指定索引值为newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lset listkey 2 0
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "0"


Tips

lpush + lpop = Stack (栈)lpush + rpop = Queue (队列)lpush + ltrim = Capped Collection (定容集合)lpush + brpop = Message Queue (消息队列)
相关文章
|
6月前
|
NoSQL Redis 索引
③【List】Redis常用数据类型: List [使用手册]
③【List】Redis常用数据类型: List [使用手册]
81 0
|
消息中间件 存储 NoSQL
【Redis从头学-5】Redis中的List数据类型实战场景之天猫热销榜单
【Redis从头学-5】Redis中的List数据类型实战场景之天猫热销榜单
233 0
|
3月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
33 0
|
4月前
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
6月前
|
索引 Python
Python标准数据类型-List(列表)
Python标准数据类型-List(列表)
|
6月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
153 3
|
6月前
|
存储 NoSQL Java
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
105 0
|
6月前
|
存储 算法 Java
【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque
【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque