首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分红宝石大ZSET

拆分红宝石大ZSET
EN

Stack Overflow用户
提问于 2016-09-18 10:38:19
回答 1查看 472关注 0票数 0

我们有一个Redis的钥匙。它是一个名为test_key的ZSET结构。关键是userId123456789.The分数是像14741948381474194839这样的时间戳。它的长度达到五千万。我们想平分它,就像test_key_1test_key_2test_key_3一样。

如何将其分开,才能使残渣更容易处理?

我们是java开发人员。最常用的红宝石是zaddzremzrangezrangeByscorezrangeByscoreWithScoreszcard等。

EN

回答 1

Stack Overflow用户

发布于 2016-09-20 05:13:07

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

调度请求

假设您将数据分成3部分,并存储在3个Redis实例中。为了确保负载平衡,代理可以使用MurmurHash函数为每个userId创建哈希键,并根据哈希键将请求分派给一个或多个Redis实例。以zadd为例:zadd test_key userId score

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

合并结果

当代理从一个或多个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 )返回给客户端。

改善性能

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39556728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档