2012-08-07 78 views
7

我是Redis的新手,所以如果這是一個愚蠢的問題,我很抱歉。Redis獲取較大字符串的速度很慢

我使用Django和Redis作爲緩存。

我正在酸洗大約200個物體的集合並將其存儲在Redis中。

當我向Redis請求收集時,Django調試工具欄通知我對Redis的請求需要花費約3 。我一定在做一些可怕的錯誤。

  • 該服務器有3.5GB的ram,它看起來像Redis目前只使用約50MB,所以我敢肯定它沒有用完內存。

  • 當我使用Redis的-CLI一樣需要多長時間,當我做到這一點從Django的

  • 從Redis的-CLI我告知的關鍵運行strlen的長度爲get關鍵〜 2000萬(這是否太大?)

如何讓Redis更快地返回數據?如果這看起來很不尋常,那麼可能會有一些常見的陷阱?我在延遲問題上看到了this page,但是我還沒有真正跳出去。

我不確定在一個密鑰中存儲大量數據是否是一個非常糟糕的主意,或者如果我的配置有問題。任何幫助或建議或事情閱讀將不勝感激。

+0

有沒有機會存儲整個對象/集合? – 2012-08-08 09:00:09

回答

16

Redis不是爲存儲非常大的對象而設計的。您不應該將整個集合存儲在Redis中的單個字符串中,而是使用Redis列表或將其設置爲對象的容器。

此外,鹹菜格式沒有針對空間進行優化...您需要更緊湊的格式。協議緩衝區,MessagePack,甚至純JSON,可能都會更好。您應該考慮在存儲數據之前應用輕量級壓縮算法(如Snappy,LZO,Quicklz,LZF等)。

最後,性能可能是網絡綁定的。在我的機器上,從Redis檢索20 MB的對象需要85 ms(而不是3秒)。現在,如果我使用遠程服務器運行相同的測試,則需要1.781秒,這在100 Mbit/s網絡上預計會達到。持續時間完全取決於網絡帶寬。

最後一點:一定要使用最近的Redis版本 - 已經完成了大量優化處理大型對象。

0

這很可能只是字符串的大小。我會看看你的對象是否被有效地序列化。