2012-06-30 43 views
0

設置:假設存儲在redis的3種類型的數據的應用:
1.會話信息
2.用戶狀態(在線/離線)
3.用戶3種最喜歡的顏色

我想問一下正確的架構來設置它。我應該:
a。僅僅用不同的密鑰存儲所有內容?即:
a1)存儲每個會話:key =「會話ID」,值=「會話信息」,
a2)將每個狀態存儲爲:key =「用戶ID」,值=「在線||離線」,
a3)存儲每個喜歡的顏色:key =「用戶顏色1 ||用戶顏色2 ||用戶顏色3」,值=「顏色名稱」

b。使用不同的密鑰存儲會話,並使用狀態/最喜歡的顏色設置?即:
b1)存儲每個會話:key =「會話ID」,值=「會話信息」,
b2)在線創建2套&離線:每個在線用戶在'設置在線',每個離線用戶在'離線設置'
b3)爲每個用戶創建一個「顏色集」:在每個集中,存儲3種最喜歡的顏色。

c。使用不同的密鑰存儲會話,並使用狀態/最喜歡的顏色列表?
c1)將每個會話存儲爲:key =「會話ID」,值=「會話信息」,
c2)在線創建2個列表&離線:'在線列表'中的每個在線用戶,'在線列表中的每個離線用戶離線'
c3)爲每個用戶創建一個「顏色列表」:在每個列表中,存儲3個最喜歡的顏色。 d)。其他選項?redis的架構的信息多組

我主要關心性能。我想要對會話,狀態和顏色進行查詢,以儘可能提高效率(假設有500萬用戶)。

回答

0

我會爲會話做字符串。它們很簡單,您可以將它們設置爲過期(SETEX)。

至於你要招致內存開銷的一組顏色,所以我只想存儲所有三種顏色爲1個的字符串值,系列化與任何JSONMessagePack(例如:SET colors:<user_id> '["red", "blue", "green"]')。

對於用戶狀態,這意味着如果用戶不在線,他們會離線,因此我會保留兩套時間和空間,只保存哪些用戶在線。從我的經驗來看,redis的速度足夠快,可以將其作爲一個集合來處理,但另一種選擇是使用redis bitmaps來處理這些數據。有關詳細信息,請參閱博客文章Chandra Patni