我有一個二維數組存儲在redis中,我看到兩種解決方案:將其存儲爲JSON字符串或每行存儲一個哈希。哪種方法更好?在redis中存儲二維數組
回答
在設計應用程序時,我遇到了同樣的問題。我選擇了簡單的一面。我將假設你的2d數據數組表示一個數據庫行。我會JSON編碼並使用SET
進行存儲。這允許我在使用一個redis命令處理多個對象時使用MGET
和MSET
。如果這個數據在我的數據庫中得到更新,我的密鑰是DEL
。對我來說,這比嘗試更新redis散列更容易。
redis中的哈希值有其優點。由於redis使用「ziplist」編碼,它們通常會佔用較少的內存。您也可以避免序列化,這對於某些應用程序可能非常重要。
下面是一個用於我的散列的示例用例。假設我想要查看給定用戶名的用戶名。我會做HGET user.usernames 1234
。這會給我用戶名爲1234的用戶名。如果沒有,我會查詢數據庫並設置它,並且因爲數據永遠不會改變,所以我永遠不會過期哈希。它允許快速查找常見的數據,而不是拉動整個用戶,反序列化並返回所需的字段。
對於一個預期的大量查找表,我使用這裏提出的算法:http://redis.io/topics/memory-optimization 它使用多個散列,好像有一個哈希,並利用ziplist編碼來節省內存。
無論您選擇哪種方法,只需保持一致。
感謝您使用redis文檔的鏈接,它讓我意識到我可以使用'SETRANGE'和'GETRANGE'命令來執行我需要的功能。我需要存儲的2D數組僅包含0到9之間的數字,因此我可以存儲唯一的字符串,並將我的數組的行連接起來。這種方法非常快。 – 2013-05-16 07:55:03
如何使用Redis lists?不支持列表列表,但可以爲每個列表條目存儲一行,或者構建引用其他列表的鍵列表。
您可以將每個元素存儲在自己的鍵中。只需要命名鍵名,以便名稱包含元素的索引,也可以是數組的維數。
- 1. 二維數組存儲
- 2. 二維數組中的存儲表jquery
- 3. 將二維數組存儲到一維數組中
- 4. 將數據存儲到二維數組
- 5. 如何在JavaScript中的二維數組中存儲隨機數?
- 6. 通過函數將值存儲在二維數組中
- 7. JavaScript將數據存儲在二維數組中
- 8. 使用二維數組在mysql中存儲數據
- 9. 將二維數組存儲在MySQL數據庫中
- 10. 將數據存儲在動態二維數組中
- 11. 如何在SharedPreferences中存儲整數二維數組?
- 12. 存儲字符串...二維數組中的數組
- 13. 我們可以存儲多維數組在Redis的
- 14. 如何將二維數組存儲在Perl中的散列中?
- 15. 在Cookie中存儲Javascript中的二維數組
- 16. 在HSQLDB中保存二維數組
- 17. 在內存中計算二維數組
- 18. 垂直反轉圖像(存儲在二維數組中)
- 19. 如何將用戶輸入存儲在二維數組中?
- 20. 在ArrayList中存儲二維數組索引?
- 21. 在二維字符串數組中存儲很多字符串
- 22. 如何在numpy二維數組中存儲列表?
- 23. 如何使用C#將二維數組存儲在postgresql中?
- 24. 如何將排列結果存儲在二維數組中?
- 25. 讀取.txt文件並存儲在二維char數組中java
- 26. 在二維數組中存儲的內容文件LUA
- 27. 是否有可能將二維數組存儲在info.plist中
- 28. 在二維數組中存儲字符串和字符(C)
- 29. 如何在二維數組中存儲值
- 30. 將圖像存儲在二維數組中?
你可以管理你的redis讀/寫嗎?這似乎是基準測試的合適情況。 – sberry 2013-05-13 16:41:59
是的,我可以管道讀/寫 – 2013-05-13 16:51:37
「更好」取決於你的形象模式。一次讀取或更新一行或一列是否有意義?你會一直保存/閱讀整個表嗎?你正在優化傳輸速度嗎?序列化速度?存儲大小? – Triptych 2013-05-13 17:27:25