redis 怎么裁剪 zset 只保留排名前 100 的数据

2023-08-03 17:12:04 +08:00
 ben548
1701 次点击
所在节点    Redis
4 条回复
996635
2023-08-03 17:18:14 +08:00
gpt:
要删除 Redis ZSet 中排名前 100 名以外的元素,您可以使用 Redis 的 ZRemRangeByRank 命令。这是一个例子,假设您的 ZSet 名称为 top_100_scores:
# 删除排名前 100 名以外的元素
redis_client.zremrangebyrank(b'top_100_scores', 100, None)
这将删除排名大于 100 的所有元素。请注意,这个命令将不会影响排名前 100 的元素。
qqjt
2023-08-03 17:22:24 +08:00
……这不是最基础的用法吗?随便搜一下就有答案的
bruce0
2023-08-03 17:23:07 +08:00
现在还不支持 给 zset 和 list 设置一个容量, 只能像 1 楼说的那样 手动裁剪

其实这种限制 redis 容量的 需求还是有的,比如 pika 社区讨论的 https://github.com/OpenAtomFoundation/pika/issues/1720

现在在做了, 不知道 redis 以前有没有讨论过这个东西, 如果 pika 那边做出来, 且成熟了 到时候可以给 redis 提个 PR
bigha
2023-08-03 17:45:14 +08:00
Redis 中可以使用 ZREMRANGEBYRANK 命令来裁剪有序集合 ZSET ,只保留排名前 N(N=100) 的数据,可以按照以下步骤进行操作:

1. 连接到 Redis 服务,并选择要操作的数据库:

```bash
redis-cli
SELECT 0
```

2. 使用 ZCARD 命令获取有序集合 ZSET 的大小,即元素数量:

```bash
ZCARD myzset
```

3. 如果有序集合 ZSET 的元素数量超过了 100 ,使用 ZREMRANGEBYRANK 命令删除排名在 100 之后的元素:

```bash
ZREMRANGEBYRANK myzset 100 -1
```

上面的命令表示删除有序集合 ZSET 中排名在 100 之后的所有元素,保留排名前 100 的元素。

4. 使用 ZCARD 命令再次检查有序集合 ZSET 的大小,确认已经裁剪成功:

```bash
ZCARD myzset
```

如果返回结果为 100 ,表示裁剪成功,只保留了排名前 100 的元素。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/962146

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX