我们有一把Redis钥匙。它是名为test_key
的 ZSET 结构。
关键是userId
,例如123
,456
,789
。得分是时间戳,如1474194838
,1474194839
。它的长度达到了五千万。我们希望将其拆分,就像test_key_1
,test_key_2
,test_key_3
一样。
如何分割它可以使CRUD更容易?
我们是java开发人员。最常用的Redis商品是zadd
,zrem
,zrange
,zrangeByscore
,zrangeByscoreWithScores
,zcard
等等。
答案 0 :(得分:0)
如果必须将数据拆分为多个Redis实例,则需要代理将请求分派给一个或多个Redis实例,并合并这些实例的结果。代理可以实现为库或服务(例如RPC服务器)。
发货请求
假设您将数据拆分为3个部分,并存储在3个Redis实例中。为了确保负载平衡,代理可以使用MurmurHash
函数为每个userId
创建一个哈希密钥,并根据哈希密钥将请求分派给一个或多个Redis实例。以zadd
为例:zadd test_key userId score
。
id = MurmurHash(userId) mod 3
zadd
命令发送到相应的Redis:zadd test_key_id userId score
合并结果
当代理从一个或多个Redis实例获取结果时,它会合并结果并返回到客户端。以zcard
为例:zcard test_key
。
zcard1 = zcard test_key1
,zcard2 = zcard test key2
,zcard3 = zcard test_key3
zcard_res = zcard1 + zcard2 + zcard3
zcard_res
)返回给客户。提高绩效
为了提高性能,当代理将请求分派给多个实例时,它应该并行调度请求。