首页/数据/数据库速查/ZREM 与区间删除(ZREMRANGEBYRANK / BYSCORE)
Redis 命令96 条

ZREM 与区间删除(ZREMRANGEBYRANK / BYSCORE)

ZREM 按成员删,返回实际删除数;ZREMRANGEBYRANK/BYSCORE 按区间批量清理,是维护榜单与过期数据的主力。

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

ZREM 与区间删除

ZREM 按成员名删除,返回实际删除的数量;ZREMRANGEBYRANK 与 ZREMRANGEBYSCORE 则按区间批量清理,一个按名次、一个按分数。后两者是维护榜单与过期数据的主力:把时间戳当分数,用 ZREMRANGEBYSCORE 清理早于某个时刻的成员,就实现了「只保留最近若干天」的数据保留策略。

基本信息

ZREM按成员名删除,返回实际删除数
ZREMRANGEBYRANK按名次区间删除,例如清掉末尾成员
ZREMRANGEBYSCORE按分数区间删除,常用于时间窗口清理
区间写法-inf 与 +inf 表示无界,左括号表示开区间
性能注意一次性删除超大区间会阻塞单线程

典型使用场景

  • 清理榜单里已知的异常成员
  • 按时间窗口删除历史数据,只保留最近若干天
  • 截断榜单末尾,控制集合规模
  • 清理测试期写入的脏数据
  • 配合延时队列清理已完成的过期任务

删除与区间清理

删除与区间清理
ZADD log 100 t1 200 t2 300 t3 400 t4
ZREM log t1                    # 1
ZREM log t1 t2                 # 1:t1 已删除,只统计实际删除的
ZREMRANGEBYSCORE log 0 250     # 1:按分数区间清理
ZREMRANGEBYRANK log 0 0        # 1:删除名次最低的一个
ZREMRANGEBYSCORE log -inf +inf # 全清
# 只保留最近 7 天(分数为秒级时间戳):
ZREMRANGEBYSCORE log -inf (1700000000

删除依据对照

命令删除依据典型用途
ZREM按成员名删除已知的异常或指定成员
ZREMRANGEBYRANK按名次区间截断榜单末尾或清理首尾
ZREMRANGEBYSCORE按分数区间时间窗口清理
左括号写法开区间,不包含该值让时间窗口边界更精确
-inf 与 +inf无界整体清空或从头清理
「时间戳作分数,再用 ZREMRANGEBYSCORE 清理到截止点」是标准的数据保留策略,实现简单,配合一个定时任务就能长期稳定运行。清理时把截止点写成开区间(加左括号)可以避免误删边界那一秒的数据。
一次删除上百万成员的大区间会阻塞单线程数百毫秒:应当分批删除,例如每次限量清理一段,或用后台任务逐步推进,把影响摊到多个时间点。
BYRANK 与 BYSCORE 极容易弄混:一个按名次、一个按分数。删错方向的数据不可逆,动手前先用 ZRANGE 或 ZRANGEBYSCORE 确认要删的到底是哪些成员。

易错点

  • 把 BYRANK 与 BYSCORE 弄混:清理错数据且不可逆
  • 一次删除超大区间:单命令阻塞数百毫秒,影响所有业务
  • 没有保留策略:集合无限增长,内存与查询性能一起恶化
  • 删完不核对数量:以为清干净了,实际还留着大量成员

数据来源与参考

  • Redis 官方文档: ZREM
  • Redis 官方文档: ZREMRANGEBYSCORE

相关工具

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