91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Memcached的原理是什么

發布時間:2021-10-19 18:22:55 來源:億速云 閱讀:109 作者:柒染 欄目:大數據

Memcached的原理是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、Memcached簡介

    memcached是高性能的分布式內存緩存服務器。它通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。與其類似常見的還有Redis。Memcached基于一個存儲鍵/值(K/V)對的hashmap。客戶端可以用任何語言來編寫,并通過memcached協議與守護進程通信。

    memcached的API使用32位元的循環冗余校驗(CRC-32)計算鍵值后,將資料分散在不同的機器上。當表格滿了以后,接下來新增的資料會以LRU機制替換掉。

二、Memcached的分布式算法

1、余數哈希(余數計算分散):

原理:根據服務器臺數的余數進行分散:先求得鍵(key)的整數哈希值( int hashCode ),通過Hash函數把key轉化成整數后,再用這個哈希值除以服務器臺數,根據余數選擇服務器。

舉例:總共10臺服務器(編號為0~9),先獲取數據的key的整數哈希值:hashCode=hash(key)=13 ,然后除以服務器總臺數,mod 10(13%10)=3,即選擇編號為3的服務器進行存儲。

缺點:當添加或減少服務器后要進行重哈希,這樣會導致原來的服務器序號變了,則可能出現求得的余數也改變,導致Memcached命中率下降,導致更多地訪問數據庫服務器去調數據,增加了數據庫服務器的負載。

2、一致性哈希:

原理:

  • 一致性哈希是將整個哈希值空間組織成一個虛擬的圓環,如假設某哈希函數H的值空間是0~(2^32 -1)(即哈希值是一個32位的無符號整型)。這個哈希空間為環。然后讓每臺機器占一個扇形空間。(一致性哈希方式,使得服務器保存的哈希值空間是一個范圍,而不是一個特定的余數系列.所以減少了增刪服務器后的影響.)

    Memcached的原理是什么

  • 哈希空間按順時針方向組織。為確定每臺服務器在空間上的位置,按照服務器主機名或者IP地址對每臺服務器進行Hash尋址。然后需要使用hash算法來判斷數據應該存儲在哪個服務器:首先,將數據根據key值使用相同的函數H計算出哈希值h,根據h確定數據在環上的位置,從此位置延環順時針向下尋找,遇到的第一個服務器就是其應該存儲的服務器。

容錯性:對下圖,當Server3服務器故障時,數據的存儲指示D發生了改變,存放在了Server2上邊。系統的存儲數據變化最少(因為是數據是順時針尋找服務器存儲,所以D位置數據找到的是Server2服務器)

  • Memcached的原理是什么

擴展性:假設增加服務器Server4,按規則放在BC中間,那么只是B存儲在Server4上邊了,整體的影響只是發生在了新增節點的區間部分。

三、Memcached的數據清除算法

  • Memcached會啟動LRU(Least Recently Used,最近最少使用)算法淘汰舊的數據項。 

  • 每個slab會維護一個隊列,剛插入的數據在隊頭,經常get的數據也會移動到隊頭,這樣較老或者訪問較少的數據相對都留在隊尾。該算法從隊尾開始淘汰。當slab分配不到足夠的內存時,首先會檢查隊尾是否有過期數據。如果有的話會直接將其覆蓋為新的對象,如果沒有,會開始淘汰隊尾的對象。

四、工作流程

  • 檢查客戶端的請求數據是否在memcached中,若存在則直接把請求數據返回,不存在則訪問數據庫服務器進行操作;

  • 如果請求的數據不在memcached中,就去查數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(memcached客戶端不負責,需要程序明確實現);

  • 每次更新數據庫的同時更新memcached中的數據,保證一致性;當分配給memcached內存空間用完之后,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,然后再替換掉最近未使用的數據。

五、Memcached 和 Redis的區別?

1、數據存儲位置:Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。而Memecache把數據全部存在內存之中;

2、速度上:Redis的速度比memcached快很多;

3、多線程:Memcached支持多線程,而Redis使用單線程的IO復用模型;

4、支持的數據類型:Memcached僅支持簡單的數據類型,想要存入復雜的數據類型必須把復雜的數據類型轉變成簡單的數據類型。Redis不僅僅支持簡單的k/v類型的數據,同時還提供string(字符串)、list(鏈表)、set(集合)、zset(sortedset --有序集合)和hash(哈希類型)等數據結構的存儲。

關于Memcached的原理是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中卫市| 通许县| 靖州| 甘洛县| 浦城县| 凤台县| 宜良县| 溆浦县| 会同县| 冷水江市| 德化县| 宜阳县| 伊金霍洛旗| 二连浩特市| 呼玛县| 织金县| 抚顺市| 雅安市| 甘谷县| 天长市| 五华县| 东港市| 上杭县| 景德镇市| 青铜峡市| 杭锦后旗| 那坡县| 瑞丽市| 永川市| 迭部县| 台中县| 景宁| 曲靖市| 宣恩县| 广安市| 连城县| 新干县| 克山县| 博乐市| 色达县| 海阳市|