Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis List缓存分页信息

使用Redis的List实现缓存分页信息

作者:写码小C

Redis List 是基于双向链表实现的有序集合(按插入顺序排序),借助 lrange 命令可快速实现分页查询,相比传统数据库(如 MySQL)的 limit offset 分页,Redis List 分页在热点数据、小范围分页场景下性能更稳定,本文给大家介绍了如何使用Redis的List实现缓存分页信息

一、Redis List 分页的核心价值

Redis List 是基于双向链表实现的有序集合(按插入顺序排序),借助 lrange 命令可快速实现分页查询,相比传统数据库(如 MySQL)的 limit offset 分页,Redis List 分页在热点数据、小范围分页场景下性能更稳定,且纯内存操作响应耗时极低,常被用于缓存“最新文章列表、评论列表、消息列表”等按时间排序的分页场景。

二、核心 API 与分页实现逻辑

1. 核心分页命令:LRANGE(只读,不修改原数据)

(1)命令格式

LRANGE key start stop

(2)核心特性

LRANGE只读操作,仅返回指定范围的元素,不会移除 List 中的元素(区别于 LPOP/RPOP 等删除类命令)。

2. 分页实现公式(通用)

假设分页参数为:

则分页的索引计算规则:

start = (pageNum - 1) * pageSize
stop = pageNum * pageSize - 1

3. 完整实战示例

(1)初始化测试数据

article:list(文章 ID 列表)插入 10 条数据(按发布时间从新到旧排序):

# 从右侧插入(保证新数据在列表头部/尾部,根据业务调整)
RPUSH article:list 101 102 103 104 105 106 107 108 109 110

(2)分页查询操作

第 1 页(每页 5 条):

LRANGE article:list 0 4  # 返回 [101, 102, 103, 104, 105]

第 2 页(每页 5 条):

LRANGE article:list 5 9  # 返回 [106, 107, 108, 109, 110]

查询所有数据(兜底场景):

LRANGE article:list 0 -1  # 返回全部 10 条数据

三、List 分页相关辅助 API

命令作用示例
RPUSH/LPUSH向 List 尾部/头部插入数据(初始化分页数据)RPUSH article:list 111 112
LLEN获取 List 总长度(计算总页数)LLEN article:list → 返回 10
LPOP/RPOP移除并返回头部/尾部元素(清理过期数据)LPOP article:list → 返回 101
LTRIM修剪 List,仅保留指定范围元素(分页后清理)LTRIM article:list 0 99

实战:结合 LLEN 计算总页数

# 1. 获取总条数
LLEN article:list → 10
# 2. 计算总页数(每页 5 条)
总页数 = CEIL(总条数 / pageSize) → CEIL(10/5) = 2

四、Redis List 分页的优势与局限

1. 优势

2. 局限

五、最佳实践

1. 适用场景

2. 避坑点

3. 替代方案(补充)

若需按自定义字段排序 / 超大分页,建议使用 Redis Sorted Set(ZSET),通过 ZRANGE 实现分页,兼顾排序与高性能。

六、小结

Redis List + LRANGE 是实现“简单有序分页”的最优解,核心优势是实现简单、性能稳定,适合热点小范围分页场景;使用时需注意控制 List 长度、避免超大 offset 分页,若需更复杂的排序/分页需求,可切换至 ZSET 实现。

以上就是使用Redis的List实现缓存分页信息的详细内容,更多关于Redis List缓存分页信息的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文