閱讀屋>資料庫作業系統> 一致性hash演算法在記憶體資料庫中的應用技巧

一致性hash演算法在記憶體資料庫中的應用技巧

一致性hash演算法在記憶體資料庫中的應用技巧

  【提要】本篇《一致性hash演算法在記憶體資料庫中的應用》特別為需要程式設計學習的朋友收集整理的,僅供參考。內容如下:

  業精於勤,荒於嬉;行成於思,毀於隨。學習程式設計的時候不僅要專心,更有用心。下面是小編整理的一致性hash演算法在記憶體資料庫中的應用,希望對大家有用,更多訊息請關注。

  由於redis是單點,但是專案中不可避免的會使用多臺Redis快取伺服器,那麼怎麼把快取的Key均勻的對映到多臺Redis伺服器上,且隨著快取伺服器的增加或減少時做到最小化的減少快取Key的命中率呢?這樣就需要我們自己實現分散式。

  Memcached對大家應該不陌生,透過把Key對映到Memcached Server上,實現快速讀取。我們可以動態對其節點增加,並未影響之前已經對映到記憶體的Key與memcached Server之間的關係,這就是因為使用了一致性雜湊。因為Memcached的雜湊策略是在其客戶端實現的,因此不同的客戶端實現也有區別,以Spymemcache、Xmemcache為例,都是使用了KETAMA作為其實現。

  一致性hash演算法:

  由於hash演算法結果一般為unsigned int型,因此對於hash函式的結果應該均勻分佈在[0,2^32-1]區間,如果我們把一個圓環用2^32 個點來進行均勻切割,首先按照hash(key)函式算出伺服器(節點)的雜湊值, 並將其分佈到0~2^32的圓環上。

  用同樣的hash(key)函式求出需要儲存資料的鍵的雜湊值,並對映到圓環上。然後從資料對映到的位置開始順時針查詢,將資料儲存到找到的第一個伺服器(節點)上。key1、key2、key3和server1、server2透過hash都能在這個圓環上找到自己的位置,並且透過順時針的方式來將key定位到server。按上圖來說,key1和key2儲存到server1,而key3儲存到server2。如果新增一臺server,hash後在key1和key2之間,則只會影響key1(key1將會儲存在新增的server上),其它不變。

  【拓展閱讀】

  PHP語言最令人“抓狂”的特性

  糟糕的type安全

  這個問題簡直可怕,首先舉個PHP程式設計師們喜聞樂見的例子:

  (string)"false"

  (int)0

  請注意,這並不屬於那種某些PHP支持者所爭論的“函式副作用”的典型情況。畢竟t當中也包含著大量由於type轉換所引發的同類情況。事實上,這一行 想表達的是:左側為字串,右側為一個整數。只不過左側與右側內容完全相等。照這樣說來,如果讓PHP的設計者負責管理、世界上的每個人都能彼此和睦相處。

  選擇太多,冗餘太多

  PHP語言的一大特色就是可做的事太多,做事的途徑同樣太多。每一行命令的結尾都可以透過數字符號或者雙斜線來進行註釋。無論是浮點數字還是雙精度數字都代表著同樣的含義。簡單的設計往往會被人們所忽略,因為大家在程式碼貢獻過程中喜歡新增自己的小特性。這有點像依靠委員會體系進行設計,只不過該委員會從來沒考慮到過把其中的差異性剔除掉。

  詭異的變數命名規則

  把美元符號作為字首實在不是個好主意。也許強制性地在所有變數前新增這個符號是為了更輕鬆地將其插入到模板當中,但這樣說來常數內容也同樣需要這麼個符號啊—為什麼實際上卻用不著呢?

  CPU資源爭奪戰

  對於32位計算裝置來說,整數數值過大始終是個無法迴避的難題。不過在另一方面,64位裝置卻不會受此影響,也就是說程式碼在不同裝置上的執行狀態是不同的。大家可以在自己的`筆記本上測試一下,我可以保證事實絕對是如此。但一旦把執行平臺轉換成伺服器,情況則會再度變化。這時如果大家希望重現自己桌上型電腦上的錯誤,結果恐怕要令各位失望。惟一的好訊息是,32位裝置將很可能最終消失。

  SQL注入

  將SQL注入這一安全漏洞的主要形式之一歸咎於PHP確實有失公允。人們在其它語言當中同樣會不慎輸入奇怪的SQL字串。之所以將其納入文章,主要是考慮到PHP語言更容易讓該漏洞攫取資料併發送至MySQL—簡單是輕而易舉。雖然新手在使用任何一種語言時都可能犯下同樣的錯誤,但這類情況在PHP中出現的機率明顯要高得多得多。

  不相容式的變更太多太多

  不同版本之間存在巨大差異,相容性問題也絕不是小事。以Java或者t為代表的程式語言在快速發展的同時也犧牲了向下相容的特性。事實上,老程式碼在新裝置上無法執行的問題並不少見。但這一切與PHP的情況其實不盡相同。在PHP方面,不同版本之間往往差別巨大,因此大家只能祈禱自己的伺服器已經安裝了正確的版本,否則只有在出現嚴重問題時才能意識到大事不妙。總而言之,在檢視伺服器上是否有專案需要升級時,請優先把目光對準PHP。更多PHP相關文章推薦:

  1.php語言基礎知識

  2.phpStorm 2016特色

  3.最實用的PHP例項程式碼21個

  &nbsp

  ;4.php中防止SQL注入的方法

  5.PHP中的條件結構語句

  6.PHP 的錯誤機制總結

  7.phpmyadmin匯入匯出資料庫檔案最大限制的解決方法

  8.php安全:全面解析跨站指令碼攻擊

  9.PHP學習:PHP拼音類

  10.PHP中實現頁面跳轉

【一致性hash演算法在記憶體資料庫中的應用技巧】相關文章: