什么是memcache?為什么要使用它悼潭?

1.背景介紹

什么是Memcache?

MemCache是一個自由庇忌、源碼開放、高性能舰褪、分布式的分布式內(nèi)存對象緩存系統(tǒng)皆疹,

MemCaChe是一個存儲鍵值對的HashMap,

在內(nèi)存中對任意的數(shù)據(jù)(比如字符串占拍、對象等)使用key-value存儲略就,

數(shù)據(jù)可以來自數(shù)據(jù)庫調(diào)用、API調(diào)用晃酒,或者頁面渲染的結(jié)果表牢。MemCache設(shè)計理念就是小而強大,

它簡單的設(shè)計促進了快速部署贝次、易于開發(fā)并解決面對大規(guī)模的數(shù)據(jù)緩存的許多難題

為什么要使用Memcache初茶?

主要用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫的負載。

它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù)浊闪,

從而提高了網(wǎng)站訪問的速度恼布。

Memcache的實現(xiàn)原理

memcache處理的原子是每一個key、val搁宾,key會通過一個hash表轉(zhuǎn)換成hash的key折汞,便于查找對比以及竟可能的做到散列。同時mem用的是一個二級散列盖腿,通過一個hash表來維護爽待。

memcache有兩個核心組件:服務(wù)端和客戶端

在一個memcache組件查詢中,client先通過key的hash值來確定kv在service端的位置翩腐,當server端確定后鸟款,客戶端就會發(fā)一個請求個server端。讓它來查找出確切數(shù)據(jù)茂卦,因為這之間沒有交互以及多播協(xié)議何什,因此mem帶給網(wǎng)絡(luò)的影響最小


2.知識剖析

Memcache的安裝

需要注意1.4.5版本之前和1.45之后的區(qū)別

MemCache和MemCached的區(qū)別

1、MemCache是項目的名稱

2等龙、MemCached服務(wù)器端可以執(zhí)行文件的名稱

MemCache命令




stats指令解讀


stats slab指令解讀



三種Memcached Client

Memcached Client for Java

SpyMemcached

XMemcached

Memcached Client for Java 比 SpyMemcached更穩(wěn)定处渣、更早、更廣泛蛛砰;

SpyMemcached 比 Memcached Client for Java更高效罐栈;

XMemcached 比 SpyMemcache并發(fā)效果更好。


3.常見問題

memcache如何儲存java對象泥畅?

memcache連接無需驗證荠诬,如何保證安全?

數(shù)據(jù)庫信息更改,怎么保證緩存和數(shù)據(jù)庫的信息一致柑贞?


4.解決方案


用序列化和反序列化儲存對象

使用內(nèi)網(wǎng)IP訪問方椎,防火墻限制IP和端口

在service中及時修改和維護緩存中的內(nèi)容


5.編碼實戰(zhàn)

參考文章下方視頻鏈接


6.擴展思考

JAVA中緩存的實質(zhì)是什么?

計算機緩存的定義 :緩存是CPU的一部分凌外,它存在于CPU中

就此可以說明 CPU中不可能存放大量的數(shù)據(jù)

所以java 的緩存 不是真正意義上的緩存


JAVA緩存有兩種:
一辩尊、文件緩存,是指把數(shù)據(jù)存儲在磁盤上涛浙,可以XML格式康辑,也可以序列化文件DAT格式還是其它文件格式。

二轿亮、內(nèi)存緩存疮薇,也就是實現(xiàn)一個類中靜態(tài)Map,對這個Map進行常規(guī)的增刪查。



7.參考文獻

百度百科

memcache超詳細解讀:http://www.cnblogs.com/xrq730/p/4948707.html

Memcache安全配置:http://blog.csdn.net/myhuashengmi/article/details/51992519

Memcached筆記:http://snowolf.iteye.com/blog/1471805


8.更多討論

什么樣的數(shù)據(jù)適合使用緩存?是把所有的數(shù)據(jù)都通過緩存進行存儲嗎

并不是把所有的數(shù)據(jù)都存進緩存我注,相對來說比較固定的數(shù)據(jù)更適合存進緩存比如用戶的賬戶以及生日

存對象必須序列化嗎?

不是String類型都必須序列化

memcache怎么實現(xiàn)分布式按咒?

在項目配置文件中配置多個節(jié)點,與部署的多臺服務(wù)器緩存IP節(jié)點對應(yīng)

或者直接使用Xmemcache但骨,更容易配置并發(fā)

memcache 的優(yōu)缺點励七?

優(yōu)點:穩(wěn)定,幾個月以來奔缠,一同裝上去的apache已重啟過多次掠抬,這期間memcache一直踏踏實實干活,一點都不需要中途加油校哎。

配置簡單两波,那是相當?shù)暮唵危瑤缀醪挥门渲妹贫撸粋€命令行的守護進程跑下來腰奋,就可以不管了

多機分布式存儲,每個前端機都能勻出一些內(nèi)存來跑memcache抱怔,這些內(nèi)存加在一起劣坊,總大小也是相當?shù)目陀^,能夠應(yīng)付足夠多的緩存數(shù)據(jù)屈留,如果開啟了memcache的壓縮選項MEMCACHE_COMPRESSED讼稚,存儲量還能有進一步提升。

速度快绕沈,這個論點需要數(shù)據(jù)支持锐想,俺手頭之前有一些不同數(shù)據(jù)量級下set/get的速度對比,但是這里不方便列出來

缺點:不能持久化乍狐,不安全

memcache在項目中使用的時候需要注意的關(guān)鍵要素是什么赠摇?

為了避免使用Memcached時出現(xiàn)異常,使用Memcached的項目需要注意:

1.不能往Memcached存儲一個大于1MB的數(shù)據(jù).

2.往Memcached存儲的所有數(shù)據(jù),如果數(shù)據(jù)的大小分布于各種chunk大小區(qū)間,從64B到1MB都有,可能會造成內(nèi)存的極大浪費以及Memcached的異常.

1. 命中率.

對于緩存服務(wù)而言,命中率是至關(guān)重要的.命中率的提升可以通過多種方案實現(xiàn).其一,提高服務(wù)獲取的內(nèi)存總量.這無疑是增加命中的最直接的辦法,將緩存數(shù)據(jù)完全放入數(shù)據(jù)池中.只要連接不失效,就一定命中.其二,提高空間利用率,這實際上也是另一種方式的增加內(nèi)存總量.具體實現(xiàn)在下一個方面給出.其三,對于一些很特別的memcache應(yīng)用,可以采用多個memcache服務(wù)進行偵聽,分開處理,針對服務(wù)提供的頻繁度劃分服務(wù)內(nèi)存,相當于在應(yīng)用一級別上再來一次LRU.其四,對于整體命中率,可以采取有效的冗余策略,減少分布式服務(wù)時某個server發(fā)生服務(wù)抖動的情況.如,14臺機器實現(xiàn)分布式memcache,劃分兩組服務(wù),其中一組13臺做一個分布式的memcache,一組1臺做整個的memcache備份.對于update操作,需要進行兩邊,get操作只需要一遍,一旦訪問失效,則訪問備份服務(wù)器.這樣,對于備份服務(wù)器需要內(nèi)存比較大,而且只適應(yīng)于讀操作大于寫操作的應(yīng)用中.這可以認為是RAID3,當然,也可以采用RAID1完全鏡像.

2. 空間利用率.

對于使用memcache做定長數(shù)據(jù)緩存服務(wù)而言,是可以在空間利用率上進行優(yōu)化.甚至最簡單的辦法可以不用更改memcache的源碼遍可以完成由-f和-n參數(shù)的配合可以做到定長優(yōu)化,不過極可能需要浪費掉預(yù)分配的199M內(nèi)存空間.當然前提是memcache的版本是1.2,同時如果使用的是1.2.0和1.2.1的話,需要更改掉一個BUG,那就是getopt時將opt串中最后一個”s”改成”n”,希望memcache能在以后的版本發(fā)現(xiàn)這個BUG.例如,如果key是一個定長id(如一個8位的流水號00000001),value是一個定長的串(如16位的任意字符串),對應(yīng)于一個chunk_size可以這么計算:chunk_size = sizeof(item) + nkey + nsuffix + nbytes = 32 + 8 + (flag長度 + (16 - 2)的長度 + 2) + 16 = 40 + 5 + 16 = 61,那么可以通過-f 1.000001 -n 61來啟動memcache.這種情況下,會浪費掉memcache預(yù)先分配的200M空間中的199M.從第2個預(yù)分配等級到第200個預(yù)分配等級將不會用到.然而,存在解決辦法,那就是在編譯memcache是加入編譯參數(shù)-DDONT_PREALLOC_SLABS,或者在源代碼中加入#define DONT_PREALLOC_SLABS即可,只是會去除memcache的預(yù)分配內(nèi)存機制.

4. 安全性能.

memcache還存在一個比較顯著的問題,那就是其安全性能.只要了解memcache監(jiān)聽的端口,對于能夠使用分布式memcache進行數(shù)據(jù)通信的網(wǎng)絡(luò)環(huán)境的機器,都可以通過memcache協(xié)議于memcache服務(wù)器進行通信,獲取或種植數(shù)據(jù).不能保證種植進內(nèi)存里的數(shù)據(jù)不會被別有心意的人再利用.也不能保證服務(wù)器的內(nèi)存不被漫天遍地的垃圾數(shù)據(jù)所堆積,造成命中極低.

memcache的設(shè)計理念在一個輕字,如果對每次Client的通訊需要校驗身份,那么恐怕memcache也就達不到其想要的效果了.存在解決辦法緩解這個問題,一般而言,需要使用memcache服務(wù)的機器,可以在Server維持一張紅色列表.這張表上的機器便可以獲取服務(wù).很顯然,memcache并非任意Client都能訪問,只有信任的機器訪問,那么為什么不將這些信任的機器放在一個/etc/mem_passwd下呢.

更多信息請查看視頻


什么是MemCache?為什么要使用它?_騰訊視頻

ppt鏈接:什么是memcache?為什么要使用它藕帜?

今天的小課堂就到這里烫罩,如果有問題,敬請留言討論洽故!

今天的小課堂就到這里贝攒,如果有問題,敬請留言討論时甚!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隘弊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荒适,更是在濱河造成了極大的恐慌梨熙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刀诬,死亡現(xiàn)場離奇詭異咽扇,居然都是意外死亡,警方通過查閱死者的電腦和手機陕壹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門质欲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糠馆,你說我怎么就攤上這事嘶伟。” “怎么了榨惠?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵奋早,是天一觀的道長。 經(jīng)常有香客問我赠橙,道長耽装,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任期揪,我火速辦了婚禮掉奄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凤薛。我一直安慰自己姓建,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布缤苫。 她就那樣靜靜地躺著速兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪活玲。 梳的紋絲不亂的頭發(fā)上涣狗,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天谍婉,我揣著相機與錄音,去河邊找鬼镀钓。 笑死穗熬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的丁溅。 我是一名探鬼主播唤蔗,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窟赏!你這毒婦竟也來了妓柜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤饰序,失蹤者是張志新(化名)和其女友劉穎领虹,沒想到半個月后规哪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求豫,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年诉稍,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝠嘉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡杯巨,死狀恐怖蚤告,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情服爷,我是刑警寧澤杜恰,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站仍源,受9級特大地震影響心褐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笼踩,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一逗爹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚎于,春花似錦掘而、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肋僧,卻和暖如春斑胜,著一層夾襖步出監(jiān)牢的瞬間持舆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工伪窖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逸寓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓覆山,卻偏偏與公主長得像竹伸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子簇宽,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一勋篓、MemCache簡介 session MemCache是一個自由、源碼開放魏割、高性能譬嚣、分布式的分布式內(nèi)存對象緩存...
    李偉銘MIng閱讀 3,789評論 2 13
  • 1、memcache的概念钞它? Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng)拜银,通過在內(nèi)存里維護一個統(tǒng)一的巨...
    桖辶殤閱讀 2,230評論 2 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)遭垛,斷路器尼桶,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 一致性Hash算法 從上面的圖中泵督,可以看出一個很重要的問題,就是對服務(wù)器集群的管理庶喜,路由算法至關(guān)重要小腊,就和負載均衡...
    青晨點支煙閱讀 1,970評論 0 6
  • 文/濟安 我生活在農(nóng)村,在我很小的時候久窟,我記得大部分的家庭都生活在土坯的房子里秩冈,磚是用泥土和稻草殼混合成的土坯,當...
    流淌的溪水閱讀 268評論 0 0