簡體   English   中英

拆分Redis大ZSET

[英]Split a Redis big ZSET

我們有一個Redis密鑰。 這是一個名為test_keyZSET結構。 關鍵是userId123456789 .The得分是時間戳等14741948381474194839 它的長度達到五千萬。 我們想要拆分它,就像test_key_1test_key_2test_key_3

如何拆分它,使CRUD更容易?

我們是Java開發人員。 最常用的Redis商品是zaddzremzrangezrangeByscorezrangeByscoreWithScoreszcard等。

如果必須將數據拆分為多個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返回給客戶端。

提高績效

為了提高性能,當代理將請求分發到多個實例時,它應該並行分發請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM