![](/img/trans.png)
[英]Is there a Java data structure equivalent to Redis sorted sets (zset)
[英]Split a Redis big ZSET
我們有一個Redis密鑰。 這是一個名為test_key
的ZSET結構。 關鍵是userId
像123
, 456
, 789
.The得分是時間戳等1474194838
, 1474194839
。 它的長度達到五千萬。 我們想要拆分它,就像test_key_1
, test_key_2
, test_key_3
。
如何拆分它,使CRUD更容易?
我們是Java開發人員。 最常用的Redis商品是zadd
, zrem
, zrange
, zrangeByscore
, zrangeByscoreWithScores
, zcard
等。
如果必須將數據拆分為多個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
返回給客戶端。 提高績效
為了提高性能,當代理將請求分發到多個實例時,它應該並行分發請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.