2013-08-25 115 views
1

我聽說Redis服務器提供的速度非常快,因此想到將它插入到作爲數據庫服務器運行在PostgreSQL上的現有Rails應用程序之一。選擇Redis密鑰名稱並限制密鑰數量

我的問題是,如果我的系統上有大約100000個用戶,並且想要實現跟隨者/跟隨模式,我可以使用Redis的SET數據類型,但是有一個很好的做法是擁有100000個不同的密鑰基於用戶。這是在我目前的情況下定義鍵的正確方法嗎?如果是這樣,單個redis實例上數字鍵的限制是多少。

有關更好地設計鑰匙的建議值得歡迎。

回答

3

Redis在處理數百萬個密鑰方面沒有問題。理論上的限制是2^32個鍵(見FAQ),所以實際上可用內存量是唯一的限制因素。

由於Redis原生支持層次結構的兩個級別:鍵和列表/散列/集合,因此每個用戶擁有一個鍵幾乎是這種情況下的唯一選項。

Redis使用very compact representation for small sets,所以如果大多數用戶只有少數關注者,內存使用率應該相當低。調整*-max-ziplist-*系列配置選項可能會爲您的特定數據集提供最佳結果。

順便說一句,您可能會對Twitter的人們如何處理巨大的追隨者生成的負載感興趣,使用Redis的部分堆棧:real-time delivery architecture談話非常有趣。

+0

嘿,非常感謝您的回覆。 但是,如果我有多個應用程序在使用相同redis實例的服務器上運行,該怎麼辦?如果我擁有1 GB服務器,您通常可以向我建議我需要遵循的優化級別。 @rkhayrov – swaroopsm

+0

Redis是一個基本的單線程應用程序。所有Redis命令都是以原子方式執行的,並且可以使用'MULTI..EXEC'塊或內置的Lua腳本(http://redis.io/topics/transactions)來創建一系列命令。所有這些使得Redis成爲多個應用程序實例的優秀消息總線/同步系統。 我不認爲一百萬用戶Rails應用程序可以在1 GB RAM中運行,特別是與RAM緩存RAM競爭:問題是沒有意義。只有實驗和分析才能說明問題。 – rkhayrov

+0

好的,這是有幫助的,所以你說的方法,2個不同的關鍵,​​即追隨者和以下可以很容易地鍛鍊約10000用戶的規模權利? – swaroopsm