首页/数据/数据库速查/LRANGE 区间读取列表
Redis 命令96 条

LRANGE 区间读取列表

按下标区间读取:0 是左端,-1 是右端,LRANGE key 0 -1 即全量;列表长时全量读同样有阻塞风险。

数据库速查数据更新于 2026-10-13

区间读取是什么

列表是按插入顺序排列的字符串序列,区间读取命令按下标取出一段元素:零表示最左端,负一表示最右端,因此取全量就是从零到负一。下标越界不会报错,会自动截断到有效范围。列表适合时间线、队列这类两端操作的场景,但要注意它两端的插入会让已有元素的下标跟着变化,用固定下标做分页会漂移。

基本信息

用途按下标区间读取列表元素
语法区间读取 键 起始 结束
下标规则零起算,负数从右端计数
越界行为自动截断到有效范围,起始大于结束返回空
复杂度与偏移量和返回元素数相关
注意事项元素增删会让下标漂移

典型使用场景

  • 展示最新动态:从列表右端取最近若干条
  • 队列消费者一次读取一批任务
  • 最近浏览记录、搜索历史这类定长列表
  • 任务列表分段处理:按区间取一段再处理
  • 调试排障:查看列表中已写入的元素
  • 与截断命令配合:列表只保留固定长度,读取时按区间取

示例

示例
RPUSH timeline:u1 t1 t2 t3 t4 t5   # 依次写入五个元素
LRANGE timeline:u1 0 2   # 取前三个:t1 t2 t3
LRANGE timeline:u1 -2 -1   # 取最后两个:t4 t5
LRANGE timeline:u1 0 -1   # 取全量,元素多时慎用
LRANGE timeline:u1 5 3   # 起始大于结束,返回空数组
LTRIM timeline:u1 0 99   # 只保留前一百条,控制列表长度

读取行为读法

情况返回处理
正常区间范围内的元素按顺序返回
负下标从右端计数的元素常用于取最近记录
起始大于结束空数组不是错误,按空数据处理
下标越界截断到有效范围结果可能少于预期但不会报错
键不存在空数组与空列表表现一致
键类型不对类型错误先确认键的类型
读取大列表全量一次性返回全部元素有阻塞风险,应改为区间读取
用偏移量做分页时,列表两端不断插入会让下标漂移,翻页出现重复或遗漏;对顺序稳定性要求高的场景应考虑带唯一标识的有序结构。
取全量在大列表上会一次返回全部元素,既占带宽也阻塞实例处理其他请求,应改用区间读取,或先截断列表长度再读。
列表只适合两端操作:在中间位置插入或删除元素的代价随列表长度上升,业务若频繁按位置改动中间元素,应改用其他数据结构。

列表使用清单

  • 写入后用截断命令控制列表长度,避免无限增长
  • 读取按区间而非全量,控制单次返回规模
  • 队列消费使用阻塞式弹出命令,避免空轮询
  • 明确写入端:统一从左或右插入,避免顺序混乱
  • 分页场景评估下标漂移的影响,必要时记录水位线
  • 列表长度纳入监控,异常增长说明清理逻辑缺失
列表长度接近上限时,读取与截断的耗时都会上升:把列表当作缓存队列使用时,务必同时配置长度上限与过期时间,两道保险缺一不可。

易错点

  • 对几万条的列表取全量:一次性大响应阻塞服务端与调用方,应改为区间读取并控制长度
  • 用下标分页却不考虑两端插入:翻页过程中下标漂移,出现重复数据与遗漏,需要按内容去重或换方案
  • 忘记截断列表:列表无限增长,内存持续上升,最后触发淘汰或写入失败
  • 在列表中间频繁插入删除:操作代价随元素数量上升,性能骤降,应改用更适合随机访问的结构
  • 把空结果当成错误:起始大于结束或键不存在都会返回空数组,应用层应按空数据处理

数据来源与参考

  • Redis 官方文档: LRANGE

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌