sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

redis_set / redis_set_member 集合表

2026-09-23
sybn

两张虚拟表都对应 redis 的 set 数据结构, 元素无序且不重复, 区别只在结果形态:

虚拟表 形态 value 类型 limit 限制 适用场景
redis_set 一行一个 key(聚合) string[] 数组 key 数 key 多, 每 key 成员少
redis_set_member 一行一个成员(展开) string 标量 成员行数(跨 key) key 少, 成员多

等效 DQL

  • 虚拟表 SQL
-- 聚合: 一行一个 key, value 为成员数组
select * from redis_set where key in ('tags:1', 'tags:2')

-- 展开: 一行一个成员
select * from redis_set_member where key = 'tags:1' limit 100
  • 等效 redis 原生命令
SRANDMEMBER tags:1 10000

注意: 查询侧底层用的是 SRANDMEMBER(随机取), 而不是 SMEMBERS. 当 set 元素个数不超过请求数量时返回全部成员, 二者等价; 超大 set 为随机采样, 不保证取全.

返回字段

redis_set(聚合):

字段 类型 说明
key string redis key
value string[] set 成员, key 不存在时为空数组

redis_set_member(展开):

字段 类型 说明
key string redis key
value string set 成员, key 不存在时无行

可查指标

指标 获取方式 说明
成员列表(聚合) redis_set where key = 's1' 一行拿到全部成员数组
成员列表(展开) redis_set_member where key = 's1' 每个成员一行, 可直接 where/join
成员数量 聚合取 value size / 展开对行 count 元素不超过 1 万时等于 SCARD
type redis_scan 恒为 set
ttl redis_scan key 的过期时间

查询示例

-- 聚合: 查成员数组
select * from redis_set where key = 'tags:1'

-- 聚合: 批量查, limit 限制 key 数
select * from redis_set where key in ('tags:1', 'tags:2') limit 10

-- 展开: 每个成员一行
select * from redis_set_member where key = 'tags:1'

-- 展开: limit 限制成员行数
select * from redis_set_member where key = 'tags:1' limit 100

-- 展开: limit 跨 key 累计, 第一个 key 取完接着取第二个
select * from redis_set_member where key in ('tags:1', 'tags:2') limit 150

限制

  1. 只支持 key = 与 key in, 不支持 and 组合.
  2. 默认上限 10000(聚合为 key 数, 展开为成员行数); 超大 set 为随机采样, 不保证取全.
  3. 不支持 group by / order by(请在外层 SQL 中完成).
  4. key 不是 set 类型时返回”数据类型错误”.

相关文档: redis_list / redis_zset / redis-dao / dynamicSourceWrite


Similar Posts

Comments

暂不开放评论! 可微信联系