避免誤用 Redis
Redis 是目前 NoSQL 領域的當紅炸子雞,它象一把瑞士軍刀,小巧、鋒利、實用,特別適合解決一些使用傳統關聯式資料庫難以解決的問題。但是 Redis 不是銀彈,有很多適合它解決的問題,但是也有很多並不適合它解決的問題。另外,Redis 作為記憶體資料庫,如果用在不適合的場合,對記憶體的消耗是很可觀的,甚至會讓系統難以承受。
我們可以對系統儲存使用的資料以兩種角度分類,一種是按資料的大小劃分,分成大資料和小資料,另一種是按資料的冷熱程度劃分,分成冷資料和熱資料,熱資料是指讀或寫比較頻繁的資料,反之則是冷資料。
可以舉一些具體的例子來說明資料的大小和冷熱屬性。比如網站總的註冊使用者數,這明顯是一個小而熱的資料,小是因為這個資料只有一個值,熱是因為註冊使用者數隨時間變化很頻繁。再比如,使用者最新訪問時間資料,這是一個量比較大,冷熱不均的資料,大是資料的粒度是使用者級別,每一個使用者都有資料,如果有一千萬使用者,就意味著有一千萬的資料,冷熱不均是因為活躍使用者的最新訪問時間變化很頻繁,但是可能有很大一部非活躍使用者訪問時間長時間不會發生變化。
大體而言,Redis 最適合處理的是小而熱,而且是寫頻繁,或者讀寫都比較頻繁的熱資料。對於大而熱的資料,如果其它方式很難解決問題,也可以考慮使用 Redis 解決,但是一定要非常謹慎,防止資料無限膨脹。原因如下:
首先,對於冷資料,無論大小,都不建議放在 Redis 中。Redis 資料要全部放在記憶體中,資源寶貴,把冷資料放在其中實在是一種浪費,冷資料放在普通的儲存比如關聯式資料庫中就好了。
其次,對於熱資料,尤其是寫頻繁的熱資料,如果量比較小,是最適合放到 Redis 中的。比如上面提到的網站總的註冊使用者數,就是典型的 Redis 用做計數器的例子。再比如論壇最新發表列表,最新報名列表,可以控制數量在幾百到一千的規模,也是典型的 redis 做最新列表的使用方式。
另外,對於量比較大的熱資料(或者冷熱不均資料),使用 Redis 時一定要比較謹慎。這種型別資料很容易引起資料膨脹,導致 Redis 消耗記憶體巨大,讓系統難以承受。薄荷的一個慘痛教訓是把使用者關注(以及被關注)資料放在 Redis 中,這是一種資料量極大,冷熱很不均衡的資料,在幾百萬的使用者級別就佔用了近 10 GB左右記憶體,讓 Redis 變得難以應付。應對這種型別的資料,可以用普通儲存 + 快取的方式。
如果用對了地方,比如在小而熱的資料情形,Redis 表現很棒,如果用錯了地方,Redis 也會帶來昂貴的代價,所以使用時務必謹慎。
相關文章
- 避免 rm 誤操作
- 事務使用中如何避免誤用分散式事務分散式
- [譯] RxJS: 避免因濫用 switchMap 而導致錯誤JS
- 5個需要避免的CSS錯誤CSS
- 學習用 Python 程式設計時要避免的 3 個錯誤Python程式設計
- 學習Web前端需要避免哪些錯誤Web前端
- 避免單例濫用單例
- 如何避免資料治理過程的誤區
- 避免誤刪檔案的12條建議
- PHP語言需要避免的10大誤區PHP
- 【譯】避免這些常見的JavaScript錯誤JavaScript
- PHP 語言需要避免的 10 大誤區PHP
- redis使用中存在的問題及如何避免(一)Redis
- redis使用中存在的問題及如何避免(二)Redis
- 如何避免應用安全風險?
- 如何避免這3 個電子郵件錯誤
- 入門Web前端有哪些誤區?該如何避免?Web前端
- 要避免的5個雲網路部署錯誤
- CIO要避免的7個資料治理錯誤!
- 專案進度延誤該如何避免和克服?
- 使用 Vue 3 時應避免的 10 個錯誤Vue
- Redis勒索事件爆發,如何避免從刪庫到跑路?Redis事件
- 使用redis watch實現秒殺搶購,避免超賣Redis
- 如何在物聯網應用開發期間避免常見的安全性誤區
- MES專案執行:3個要避免的錯誤
- 收藏 | 資料視覺化應該避免的誤區視覺化
- CIO應避免的三個低程式碼部署錯誤
- 人工智慧專案需要避免的9個錯誤人工智慧
- 避免Java堆空間錯誤的5個步驟Java
- 避免PL/SQL Case Not Found錯誤三方法SQL
- 避免常見的六種HTML5錯誤用法HTML
- 可簡單避免的三個 JavaScript 釋出錯誤JavaScript
- redis應用Redis
- [譯] 避免那些可惡的 "cannot read property of undefined" 錯誤Undefined
- Java新手會遇到的三大誤區,一定要避免!Java
- Python小白入門指南:避免踩雷的10大錯誤!Python
- 使用Python變數時要避免的3個錯誤Python變數
- 如何避免軟體工程中最昂貴錯誤的發生軟體工程