两张虚拟表都对应 redis 的 list 数据结构, 元素按插入顺序排列, 允许重复, 区别只在结果形态:
| 虚拟表 | 形态 | value 类型 | limit 限制 | 适用场景 |
|---|---|---|---|---|
| redis_list | 一行一个 key(聚合) | string[] 数组 | key 数 | key 多, 每 key 元素少 |
| redis_list_member | 一行一个元素(展开) | string 标量 | 元素行数(跨 key) | key 少, 元素多 |
等效 DQL
- 虚拟表 SQL
-- 聚合: 一行一个 key, value 为全部元素数组
select * from redis_list where key in ('queue:1', 'queue:2')
-- 展开: 一行一个元素, 带位置 idx
select * from redis_list_member where key = 'queue:1' limit 100
- 等效 redis 原生命令
LRANGE queue:1 0 -1
聚合形态取整个 list; 展开形态按剩余配额分批 LRANGE, 不会一次性拉取超大 list.
返回字段
redis_list(聚合):
| 字段 | 类型 | 说明 |
|---|---|---|
| key | string | redis key |
| value | string[] | list 全部元素, key 不存在时为空数组 |
redis_list_member(展开):
| 字段 | 类型 | 说明 |
|---|---|---|
| key | string | redis key |
| idx | int | 元素位置(从 0 开始, 每个 key 独立计数) |
| value | string | list 元素, key 不存在时无行 |
可查指标
| 指标 | 获取方式 | 说明 |
|---|---|---|
| 全部元素(聚合) | redis_list where key = 'l1' |
按顺序的元素列表 |
| 全部元素(展开) | redis_list_member where key = 'l1' |
每个元素一行, 可直接 where/join, 并带 idx |
| 元素长度 | 聚合取 value size / 展开对行 count | 等于 LLEN |
| type | redis_scan | 恒为 list |
| ttl | redis_scan | key 的过期时间 |
查询示例
-- 聚合: 查整个 list
select * from redis_list where key = 'queue:1'
-- 聚合: 批量查, limit 限制 key 数
select * from redis_list where key in ('queue:1', 'queue:2') limit 10
-- 展开: 每个元素一行
select * from redis_list_member where key = 'queue:1'
-- 展开: limit 限制元素行数
select * from redis_list_member where key = 'queue:1' limit 100
-- 展开: limit 跨 key 累计, 第一个 key 取完接着取第二个, 新 key 的 idx 从 0 重新计数
select * from redis_list_member where key in ('queue:1', 'queue:2') limit 150
限制
- 只支持
key =与key in, 不支持 and 组合. - 默认上限 10000(聚合为 key 数, 展开为元素行数); 聚合固定取全量(LRANGE 0 -1), 不支持下标范围参数.
- 展开形态按 idx 顺序返回, 不支持倒序.
- 不支持 group by / order by(请在外层 SQL 中完成).
- key 不是 list 类型时返回”数据类型错误”.
相关文档: redis_set / redis-dao / dynamicSourceWrite