薄荷 app 上的夥伴功能大量使用了記憶體資料庫 redis,隨著資料量的快速增長,redis 膨脹得很hnxkpq快,已經接近 12 gb規模,這些資料全部放在單個 redis 例項中。單個巨大 redis 例項有如下幾個壞處:
1.首先,需要一台記憶體很大的機器。redis 是記憶體資料庫,它需要把所有需求全部放在記憶體中,需要為之裝下 12 gb的 redis 例項,至少需要 12 gb 記憶體大小的機器,考慮的預留增長空間,一般需要 12 * 1.5 約 18 gb 記憶體。 另外還有乙個考慮的因素是,redis 進行硬碟資料儲存時,fork 程序需要消耗同樣大小的記憶體,因此乙個 12gb 的 redis 例項程式設計客棧需要 32 gb左右的記憶體比較合適,這對機器提出了很高的要求,常常難以滿足。
2.然後,redis 容易成為效能瓶頸。redis 的併發模型是單程序單執行緒,它不能充分利用多核 cpu,在請求數很高,或者某一些請求處理比較慢時(比如一些大的資料排序),可能會成為系統的效能瓶頸。有方法可以緩解甚至這個問題,就是建立多個 redis 例項,通過多個 redis 連線來實現。
3.另外,單個巨大的 redis 例項也會增加資料管理難度,因為這麼大的資料量,無論是複製,備份操作都比較慢,容易對線上系統造成衝擊。
因此,十分有必要把單個巨大的 redis 例項分割成多個小的 redis 例項。
使用 redis 的複製機制,可以**平滑處理 redis 例項分割,幾乎不會對系統有很大的影響。
分割的具體操作思路如下:
1.首先,規劃 redis 分割策略,通常是基於業務劃分,比如薄荷夥伴是基於業務分成 timeline, user_relationship, other 3個 redis 例項。規劃好之後,需要根據規劃結果對應用程式中 redis 程式**做修改,通常是有乙個統一的 redis 鏈結修改為多個 redis 連線,不同業務使用不同的連線。
2.然後,通過 redis 複製功能建立程式設計客棧多個 redis 副本,讓不同 redis 連線使用不同的 redis 副本,在 redis 副本中刪除多餘的資料。批量刪除某個模式的 keys,可以使用下面的 shell 命令:
複製** **如下:
redis-cli keys "" | xargs redis-cli del
改成實際的hnxkpq模式,如
複製** **如下:
redis-cli keys "user:*:fohnxkpqllowers" | xargs redis-cli del
表示刪除 user followers 資料。
最後通過來回切換並重啟 redis 例項達到完全分割 redis 例項。
本文標題: 分割超大redis資料庫例子
本文位址:
MYSQL資料庫超大級別資料讀
場景 當資料量達到一定千萬級別的記錄,且查詢的字段又多的時候,此時將查詢資料的快取全部儲存在php的記憶體當中會導致記憶體溢位。資料庫查詢 pdo setattribute pdo mysql attr use buffered query,false startmemory memory get ...
Sybase資料庫超大表資料矯正更新
隨著資料的增長,系統中過千萬的業務表在已經不少見。對這些超大表進行矯正更新時,直接update會產生大量的事務日誌,撐爆日誌空間,導致事務回滾矯正失敗。解決問題的思路就是分批提交減少事務日誌的大小,其中一種方法是在儲存過程中使用游標更新並批量提交。如下 use ywst go 建立更新儲存過程,更新...
如何分割sdf資料庫
f d zinc 400 ligands ligand46 concat 46 split number 35000 number of molecules in each file number of sdfs split number i 0j 0 f2 open f str j sdf w f...