gpt4 book ai didi

java - 拆分一个Redis大ZSET

转载 作者:可可西里 更新时间:2023-11-01 11:31:43 27 4
gpt4 key购买 nike

我们有一个 Redis key 。这是一个名为 test_keyZSET 结构。key是userId,比如123,456,789。分数是时间戳,比如14741948381474194839。它的长度达到了五千万。我们要拆分它,就像test_key_1test_key_2test_key_3

如何拆分才能使CRUD更容易?

我们是 java 开发人员。最常用的 Redis 商品是 zaddzremzrangezrangeByscorezrangeByscoreWithScores, zcard

最佳答案

如果您必须将数据拆分到多个 Redis 实例中,那么您需要一个代理来将请求分派(dispatch)到一个或多个 Redis 实例,并合并来自这些实例的结果。代理可以实现为库或服务(例如 RPC 服务器)。

Dispatch request

假设您将数据分成 3 部分,并存储在 3 个 Redis 实例中。为了保证负载均衡,proxy可以使用MurmurHash函数为每个userId创建一个hash key,并根据hash将请求分派(dispatch)给一个或多个Redis实例 key 。以zadd为例:zadd test_key userId score

  1. 计算 Redis 实例 ID:id = MurmurHash(userId) mod 3
  2. 向对应的Redis发送zadd命令:zadd test_key_id userId score

Merge results

当代理从一个或多个 Redis 实例中获取结果时,它会将结果合并并返回给客户端。以zcard为例:zcard test_key

  1. 从所有实例中获取结果:zcard1 = zcard test_key1zcard2 = zcard test key2zcard3 = zcard test_key3
  2. 合并结果:zcard_res = zcard1 + zcard2 + zcard3
  3. 返回结果,即zcard_res,给客户端。

Improve performance

为了提高性能,当代理向多个实例发送请求时,它应该并行发送请求。

关于java - 拆分一个Redis大ZSET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39556728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com