Nosql技術---------memcache緩存

MemCache是什麼?

MemCache是一個自由、源碼開放、高性能、分佈式的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫的負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高了網站訪問的速度。MemCaChe是一個存儲鍵值對的HashMap,在內存中對任意的數據(比如字符串、對象等)所使用的key-value存儲,數據可以來自數據庫調用、API調用,或者頁面渲染的結果。MemCache設計理念就是小而強大,它簡單的設計促進了快速部署、易於開發並解決面對大規模的數據緩存的許多難題,而所開放的API使得MemCache能用於Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序語言。

另外,說一下MemCache和MemCached的區別:

1、MemCache是項目的名稱

2、MemCached是MemCache服務器端可以執行文件的名稱

特別澄清一個問題,MemCache雖然被稱爲”分佈式緩存”,但是MemCache本身完全不具備分佈式的功能MemCache集羣之間不會相互通信(與之形成對比的,比如JBoss Cache,某臺服務器有緩存數據更新時,會通知集羣中其他機器更新緩存或清除緩存數據),所謂的”分佈式”,完全依賴於客戶端程序的實現

MemCache寫緩存的流程:

1、應用程序輸入需要寫緩存的數據

2、API將Key輸入路由算法模塊,路由算法根據Key和MemCache集羣服務器列表得到一臺服務器編號

3、由服務器編號得到MemCache及其的ip地址和端口號

4、API調用通信模塊和指定編號的服務器通信,將數據寫入該服務器,完成一次分佈式緩存的寫操作

MemCache實現原理

首先要說明一點,MemCache的數據存放在內存中,存放在內存中個人認爲意味着幾點:

1、訪問數據的速度比傳統的關係型數據庫要快,因爲Oracle、MySQL這些傳統的關係型數據庫爲了保持數據的持久性,數據存放在硬盤中,IO操作速度慢

2、MemCache的數據存放在內存中同時意味着只要MemCache重啓了,數據就會消失

3、既然MemCache的數據存放在內存中,那麼勢必受到機器位數的限制,這個之前的文章寫過很多次了,32位機器最多隻能使用2GB的內存空間,64位機器可以認爲沒有上限

然後我們來看一下MemCache的原理,MemCache最重要的莫不是內存分配的內容了,MemCache採用的內存分配方式是固定空間分配。

Memcache 緩存機制 以及分佈式

 傳統的查詢方法是直接查詢數據庫,數據庫將結果返回給查詢語句,而當有Memcache中間緩存層時,查詢的是Memcache緩存數據,下面詳細瞭解Memcache各類數據操作原理:

1. 查詢數據(select),首先通過指定的Key查詢(get)Memcache中間緩存層數據,如果存在相對應數據,則直接獲取出數據結果,查詢過程完全不需要查詢數據庫。如果不存在,則查詢MySQL數據庫,並以key對應value的形式將查詢結果存儲在Memcache緩存數據中,然後將結果返回給查詢語句。
2. 更新數據(update),首先更新數據,然後刪除相關的memcache數據(delete)。
3. 增加數據(add),首先刪除相關緩存數據,然後增加數據。
4. 刪除數據(delete),刪除數據,並刪除Memcache數據。

Memcache的應用場景有:

 1.如果是一個小網站,pv值不大,就不考慮使用memcached
 2.變化頻繁,查詢頻繁,但是不一定寫入數據庫(適合memcached)(用戶在線狀態)
 3.變化頻繁,一變化就要入庫(比如股票,金融)不適合memcached
 4.變化不頻繁,查詢頻繁,不管入不入庫,都比較適合memcache,(新浪的新聞頻道)

    分佈式是指將不同的業務分佈在不同的地方(幾臺服務器)。 而集羣指的是將幾臺服務器集中在一起,實現同一業務。
分佈式中的每一個節點,都可以做集羣。 而集羣並不一定就是分佈式的。

舉例:就比如新浪網,訪問的人多了,他可以做一個集羣,前面放一個響應服務器,後面幾臺服務器完成同一業務,如果有業務訪問的時候,響應服務器看哪臺服務器的負載不是很重,就交給哪一臺去完成。而分佈式,從窄意上理解,也跟集羣差不多, 但是它的組織比較鬆散,不像集羣,有一個組織性,一臺服務器垮了,其它的服務器可以頂上來。memcache的分佈式算法取決於客戶端,主要用取餘算法和一致性哈希算法。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章