Redis 列表(List)
封面图
•
2025-12-23
•
redis
232
0
0
0
Redis 的 **List(列表)** 是一种 **有序的字符串集合**,它允许在列表的两端进行插入和删除操作。Redis 的 List 是基于 **双向链表(linked list)** 实现的,这使得它在两端的操作非常高效(时间复杂度为 O(1))。但是,在中间位置进行操作时效率较低(时间复杂度为 O(n))。 --- ## 📌 一、List 的特点 - 有序:元素是按插入顺序排列的。 - 可重复:允许有重复的元素。 - 支持从两端操作: - `LPUSH` / `RPUSH`:向列表左边/右边添加元素。 - `LPOP` / `RPOP`:从列表左边/右边移除元素。 - 支持获取指定范围内的元素:`LRANGE`。 - 支持通过索引访问元素:`LINDEX`。 - 支持列表长度查询:`LLEN`。 --- ## 🧩 二、常用命令 | 命令 | 描述 | |------|------| | `LPUSH key value [value ...]` | 将一个或多个值插入到列表头部(最左边) | | `RPUSH key value [value ...]` | 将一个或多个值插入到列表尾部(最右边) | | `LPOP key` | 移除并返回列表的第一个元素(最左边) | | `RPOP key` | 移除并返回列表的最后一个元素(最右边) | | `LRANGE key start end` | 获取列表中指定范围的元素(索引从0开始) | | `LINDEX key index` | 获取列表中指定索引的元素 | | `LSET key index value` | 设置列表中某个索引位置的元素 | | `LINSERT key BEFORE|AFTER pivot value` | 在某个元素前或后插入新元素 | | `LREM key count value` | 移除列表中与指定值相等的元素(count 表示移除的数量) | | `LLEN key` | 返回列表的长度 | --- ## 💡 三、使用场景 - 消息队列(如用 Redis 作为消息中间件) - 日志记录 - 任务队列(先进先出) - 缓存最近的 N 条数据 - 队列和栈结构的实现 --- ## 🧪 四、示例 ```bash # 向列表左侧添加元素 LPUSH mylist "a" LPUSH mylist "b" # 向列表右侧添加元素 RPUSH mylist "c" RPUSH mylist "d" # 查看整个列表 LRANGE mylist 0 -1 # 输出: 1) "b", 2) "a", 3) "c", 4) "d" # 获取第 1 个元素(索引从0开始) LINDEX mylist 1 # 输出: "a" # 删除最左边的一个元素 LPOP mylist # 输出: "b" # 查看当前列表长度 LLEN mylist # 输出: 3 ``` --- ## ⚠️ 五、注意事项 - 如果 Key 不存在,所有 List 命令都会被当作空列表处理。 - Redis 的 List 是 **阻塞式** 的(例如 `BLPOP`、`BRPOP`),可以用于实现阻塞队列。 - List 不适合频繁地在中间位置进行操作,因为性能较差。 --- ## ✅ 六、总结 | 特性 | 说明 | |------|------| | 数据类型 | String | | 存储方式 | 双向链表 | | 有序性 | 是 | | 是否重复 | 是 | | 两端操作 | 高效(O(1)) | | 中间操作 | 低效(O(n)) | --- 如果你需要了解 Redis 的其他数据结构(如 Set、Hash、ZSet 等),也可以告诉我,我可以继续为你讲解 😊
上一篇:
redis使用redis-cli查看所有的keys及清空所有的数据
下一篇:
php Redis实现 网站最近的访问用户
Redis 列表(List)
标题录入,一次不能超过6条
留言
评论