我们有一个Redis的钥匙。它是一个名为test_key的ZSET结构。关键是userId像123,456,789.The分数是像1474194838,1474194839这样的时间戳。它的长度达到五千万。我们想平分它,就像test_key_1,test_key_2,test_key_3一样。
如何将其分开,才能使残渣更容易处理?
我们是java开发人员。最常用的红宝石是zadd、zrem、zrange、zrangeByscore、zrangeByscoreWithScores、zcard等。
发布于 2016-09-20 05:13:07
如果您必须将数据拆分为多个Redis实例,那么您需要一个代理将请求分派到一个或多个Redis实例,并将这些实例的结果合并。代理可以实现为库或服务(例如,RPC服务器)。
调度请求
假设您将数据分成3部分,并存储在3个Redis实例中。为了确保负载平衡,代理可以使用MurmurHash函数为每个userId创建哈希键,并根据哈希键将请求分派给一个或多个Redis实例。以zadd为例:zadd test_key userId score。
id = MurmurHash(userId) mod 3zadd命令发送到相应的Redis:zadd test_key_id userId score合并结果
当代理从一个或多个Redis实例获得结果时,它会合并结果并返回给客户端。以zcard为例:zcard test_key。
zcard1 = zcard test_key1、zcard2 = zcard test key2、zcard3 = zcard test_key3zcard_res = zcard1 + zcard2 + zcard3zcard_res )返回给客户端。改善性能
为了提高性能,当代理将请求发送到多个实例时,它应该并行地发送请求。
https://stackoverflow.com/questions/39556728
复制相似问题