Redis集群RTT

Redis集群RTT

我們目前使用 Redis 作為我們的資料儲存。我正在創建一個新部分,我們需要對用戶進行排名和分頁。所以我想使用排序集來保持排名和用戶ID。以及用於保存用戶個人資料資料的雜湊值。一位同事引起我的注意,我們需要向 Redis 發出許多請求才能使用 HGET 取得使用者個人資料資料。所以往返時間將成為一個問題。我本來打算使用 HMGET,但經過一些研究後,我發現 Redis 叢集時可能會出現問題,因為金鑰儲存在不同的 Redis 節點中。我正在使用 phpredis,它具有客戶端分片(我無法理解那是什麼)。

我想這樣做:

zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3

使用者資料

hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"

1)HMGET在集群Redis中能正常運作嗎?

2)如果不是我能做什麼?

3)有沒有更好的方法來實現這個?

答案1

  1. HMGET 應該在群集 Redis 中工作,因為它只與單一鍵相關。每個 HMGET 都會轉送到包含該金鑰的節點
  2. /
  3. 將每個序列化用戶儲存在雜湊中並不是一個好主意,您將失去請求/增加/減少某些欄位的能力。

更喜歡:

hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb

您的排名架構沒問題。要在排名最高的使用者之間檢索和分頁,只需執行以下操作ZREVRANG按分數然後請求每個用戶。

筆記:聚類不等於分片

相關內容