任務六:memcache的使用

大家好,我是IT修真院深圳分院java第4期學員,一枚正直善良的java程序員。今天給大家分享一下,修真院官網java任務六中關于memcache的知識,以及memcache的使用。

1.背景介紹

Memcached是一種基于內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。

Memcached簡潔而強大。它的簡潔設計便于快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。

本質上,它是一個簡潔的key-value存儲系統。

一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。

2.知識剖析

為什么會有Memcache和memcached兩種名稱?

其實Memcache是這個項目的名稱,而memcached是它服務器端的主程序文件名。

memcached運行:

啟動選項:

d是啟動一個守護進程

m是分配給Memcache使用的內存數量,單位是MB

u是運行Memcache的用戶

l是監聽的服務器IP地址,可以有多個地址

p是設置Memcache監聽的端口,,最好是1024以上的端口

c是最大運行的并發連接數,默認是1024

P是設置保存Memcache的pid文件

java客戶端的實現:XMemcached

XMemcached是一個新java memcached client。

XMemcached是基于java nio的客戶端,java nio相比于傳統阻塞io模型來說,有效率高(特別在高并發下)和

資源耗費相對較少的優點。傳統阻塞IO為了提高效率,需要創建一定數量的連接形成連接池,而nio僅需要一

個連接即可(當然,nio也是可以做池化處理),相對來說減少了線程創建和切換的開銷,這一點在高并發下特別明顯。

XMemcached的使用:

1)導入xmemcached依賴

2)創建MemcachedClientBuilder,然后builder一個MemcachedClient

Memcached 存儲命令:

Memcached set 命令:用于將 value(數據值) 存儲在指定的 key(鍵) 中。

如果set的key已經存在,該命令可以更新該key所對應的原來的數據,也就是實現更新的作用。

Memcached add 命令:Memcached add 命令用于將 value(數據值) 存儲在指定的 key(鍵) 中。

如果 add 的 key 已經存在,則不會更新數據(過期的 key 會更新),之前的值將仍然保持相同。

Memcached replace 命令:用于替換已存在的 key(鍵) 的 value(數據值)。

如果 key 不存在,則替換失敗

Memcached append 命令:用于向已存在 key(鍵) 的 value(數據值) 后面追加數據 。

Memcached prepend 命令:用于向已存在 key(鍵) 的 value(數據值) 前面追加數據 。

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于執行一個"檢查并設置"的操作

它僅在當前客戶端最后一次取值后,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。

檢查是通過cas_token參數進行的, 這個參數是Memcach指定給已經存在的元素的一個唯一的64位值。

Memcached 查找命令:

Memcached get 命令:獲取存儲在 key(鍵) 中的 value(數據值) ,如果 key 不存在,則返回空。

Memcached gets 命令:獲取帶有 CAS 令牌存 的 value(數據值) ,如果 key 不存在,則返回空。

Memcached delete 命令:用于刪除已存在的 key(鍵)。

Memcached incr 與 decr 命令用于對已存在的 key(鍵) 的數字值進行自增或自減操作。

incr 與 decr 命令操作的數據必須是十進制的32位無符號整數。

Memcached 統計命令:

Memcached stats 命令:用于返回統計信息例如 PID(進程號)、版本號、連接數等。

Memcached stats items 命令:用于顯示各個 slab 中 item 的數目和存儲時長(最后一次訪問距離現在的秒數)。

Memcached stats slabs 命令:用于顯示各個slab的信息,包括chunk的大小、數目、使用情況等。

Memcached stats sizes 命令用于顯示所有item的大小和個數。

該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數。

Memcached flushAll 命令:用于用于清理緩存中的所有 key=>value(鍵=>值) 對。

3.常見問題

Memcached本身并沒有提供迭代所有key的方法,如何查看memcache中所有的key?

4.解決方案

想迭代所有的key,你只需要獲取一個KeyIterator,然后遍歷KeyIterator即可。

5.編碼實戰

。。。

6.擴展思考

為什么使用cas協議?

當我們的應用是分布式的,無狀態的應用服務器通過負載均衡,部署到了多臺。

如果不采用CAS,則有如下的情景:

第一步,A取出數據對象X;

第二步,B取出數據對象X;

第三步,B修改數據對象X,并將其放入緩存;

第四步,A修改數據對象X,并將其放入緩存。

第四步和第三步的存儲數據就產生了沖突。所以需要cas操作命令:

cas操作必須先要通過,gets名利獲得cas令牌,然后把令牌帶入cas命令才可以修改數據。

7.參考文獻

參考一:Xmemcached 中文用戶指南

參考二:memcached 菜鳥教程

8.更多討論

1)不同服務器間的不同memecache的數據可以共享嗎?

沒有共享的必要。

2)memcache分布式算法有幾種?

我所知道的有:余數哈希,一致性哈希,但是現在基本都用一致性哈希。

3)電腦關機,memcache數據還存在嗎?

這要看你的memcache是安裝在什么地方,要是裝在本機,那么關機之后數據就沒有了,我是裝在服務器,我的服務器一直開機,所以,我的電腦關機對我的memecache數據沒有影響。

4)memcache節點是什么?

考量 Hash 算法的另一個指標是平衡性 (Balance) ,定義如下:

平衡性:平衡性是指哈希的結果能夠盡可能分布到所有的緩沖中去,這樣可以使得所有的緩沖空間都得到利用。

hash算法并不是保證絕對的平衡,如果 cache 較少的話,對象并不能被均勻的映射到 cache 上,比如在上面的例子中,僅部署 cache A 和 cache C 的情況下,在4個對象中, cache A 僅存儲了 object1 ,而 cache C 則存儲了 object2 、 object3 和 object4 ;分布是很不均衡的。

為了解決這種情況, consistent hashing 引入了“虛擬節點”的概念,它可以如下定義:

“虛擬節點”( virtual node )是實際節點在 hash 空間的復制品( replica ),一實際個節點對應了若干個“虛擬節點”,這個對應個數也成為“復制個數”,“虛擬節點”在 hash 空間中以 hash 值排列。

5)memcache存儲的方式:

它是key-value形式存儲的。

PPT鏈接:戳這里

騰訊視頻:戳這里

今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~

技能樹。IT修真學院

“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容