還有朋友問:有一些dbms提供內存表的功能,比如mysql的內存表,可以代替memcached。但我要建議你的是:mysql的內存表確實起到同樣的作用,但它的侷限也很多,往往不能讓你隨心所欲,所以建議你不要走彎路。
二、memcached的應用場景
memcached產品或相關技術的應用,我們在前面已經提到了一些。其實它的應用還是非常普遍的,應用作爲廣泛的領域:例如sns類網站、blog類網站、bbs類網站以及im後臺服務。
2.2 sns類網站的應用
livejournal.com是99年始於校園中的項目,有點像中國的校內網。幾個學生純屬出於愛好做了這樣一個網站,主要實現以下功能: sns、blog、bbs和rss等。livejournal從建立開始就採用了大量的開源軟件,到現在它本身也衍生了不少開源軟件。 sns網站,現在比比皆是,規模比較大的象開心、校內、51,它們的頁面上往往需要引用大量的用戶信息、好友信息以及文章信息等,所以跨表或跨庫操作會相當多。如果這些功能全部直接操作數據庫,顯然會帶來極大的效率損耗和系統負載。memcached在這樣的場景下就會發揮巨大的作用,它採用大內存把這些不變的數據全都緩存起來,當數據修改時就通知cache過期,這樣應用層基本上就可以解決大部分問題了,只有很小一部分請求穿透應用層,用到數據庫。
象blog.sina.com.cn這些流量巨大的blog系統,它需要頻繁讀寫的一些小數據。其中最典型的應用,我們通常成爲“數字類服務”,比如blog中需要實時顯示的用戶點擊數和閱讀數,bbs中需要記錄的在線人數、在線用戶等。這些小數據的處理非常繁瑣,你無論怎麼去設計數據庫,都很難避開跨表或者跨庫。有的朋友會說,可以在數據庫中增加冗餘字段解決這類問題,但事實上,這既不符合數據庫設計的範式規則,也很難做到數據的一致性,由此會引發更爲複雜的問題。而且由於產品線的分散發展,數據已經很難做到完全的統一規劃。memcached在這樣的場景下就會將這些小數據進行緩存,定期持久化就可以了,查詢操作一直都在內存中運行。說到這裏,有的朋友又會想到一些其它的問題:“memcached server宕機了怎麼辦,怎麼保證與數據庫的數據一致”。我會對你說:“你的問題非常好,我們將會在後面章節給出相應的解決方案”。另外,其實這種小數據並不是關鍵性數據,即使偶爾發生點錯誤,也沒太大的問題。blog、bbs系統並不是嚴格的企業級系統,假如你是爲銀行業務提供解決方案的話,memcached並不適合。
我們舉了幾個例子來說明memcached的應用場景,似乎都侷限於小數據服務,那是不是就不能用於較大數據的緩衝了?那絕不是,memcached能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等等,而且生產環境中就這麼跑過,只不過讓大數據量使用緩衝的話,有點太浪費了,同樣數量的內存存不了幾條數據,所以會明顯的降低命中率。
本文出自 “網站架構之家”
博客,請務必保留此出處http://wangzebin.blog.51cto.com/653300/128235