首页/数据/数据库速查/去重方案对比(Set/Bitmap/HLL/Bloom)
Redis 运维与场景124 条

去重方案对比(Set/Bitmap/HLL/Bloom)

按「要不要判断单个元素存在 + 精度 + 内存」选去重结构:Set 精确但费内存、Bitmap 适合稠密整数 ID、HLL 近似基数、布隆过滤器可判定存在但有误判。

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

方案对比

方案精确性内存适用
Set精确大(每元素开销)中小基数,需判断成员
Bitmap精确与最大 ID 成正比稠密连续整数 ID
HLL近似(约 0.8%)每键 ≤12KBUV 类基数统计
Bloom存在判定有误判小拦截不存在的查询/重复提交

四类命令

四类命令
SADD dedup:order:2026 O1 O2            # 精确
SETBIT ua:20261012 1001 1              # 稠密 ID
PFADD uv:20261012 u1001                # 近似基数
BF.ADD bloom:user u1001                # 布隆(需 RedisBloom 模块)
BF.EXISTS bloom:user u1001
组合拳示例:查询先过布隆过滤器拦不存在的数据,再用 Set 精确判重;报表 UV 用 HLL 省内存。

易错点

  • 用 HLL 判断「某元素是否出现过」:它不支持单元素查询
  • Bitmap 用稀疏超大 ID:内存按最大 ID 分配,直接爆掉

数据来源与参考

  • Redis 官方文档: 数据类型
  • RedisBloom 文档

相关工具

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