Memcached相關內容總結

1.Memcached經常使用命令總結

Memcached命令格式通常爲:
command
其中描述以下:
算法

參數 描述
command 操做命令,通常爲set/add/replace/get/delete等
key 緩存的key,Memcache內部限制不能超過250個字符,
flag 標識數據格式,好比JSON、XML等
expiration time 過時時間,單位爲s,0爲不過時,最好設置過時時間,以避免保存大量無效數據,最大過時時間爲30天,超過30天則緩存獲取不到
bytes 字節數,好比1234,則字節數爲4
value 緩存中的值

好比如下命令:數據庫

set name 0 0 4 test// key 爲name,value爲test,字節數4個,緩存不過時

經常使用命令列表以下:json

命令 描述
set 添加或者更新
get 獲取數據
add 數據不存在的時候添加
replace 數據存在的時候替換value的值
append 後面追加
prepend 前面追加

2.Memcached主要特徵

1.協議簡單緩存

server和client的通訊並不使用複雜的XML或者json協議,而是使用簡單的文本協議和二進制協議

2.內置內存存儲方式服務器

Memcached是純內存存儲,不支持持久化,所以當Memcached重啓或者機器重啓的時候全部數據會丟失。

所以會存在數據重啓沒法恢復的問題app

3.Memcached使用客戶端分佈式分佈式

Memcached服務端沒有分佈式的功能,各個實例之間並不會互相通訊或者數據共享,所以須要依賴客戶端實現分佈式。

3.Memcached存在的問題

1.所以會存在數據重啓沒法恢復的問題  

能夠經過配合持久化數據庫MemcachedDB使用  

2.沒法經過key作範圍查詢

3.沒有提供高可用相關支持,只能經過客戶端邏輯來處理,好比寫入的時候同時寫入主備服務器

4.Memcached內存存儲分析

Memcached使用Slab Allocator機制分配和管理內存,這種分配機制能夠減小內存碎片的產生,減輕系統管理內存的負擔。memcached

Slab Allocator的分配機制其實很簡單,就是將內存分割成各類尺寸的內存快(Chunk)並將尺寸相同的內存塊分組Slab Class。其中分配的快能夠從新利用,不會釋放到內存中。
其中分配給Slab Class的內存空間爲Page(默認大小爲1MB)。
內存分配結構大體以下:
code

分配的內存快大小目前默認最小內存塊爲:88Bytes,Growth Factor決定了內存塊增加的幅度,默認值爲1.25,能夠經過啓動參數配置。server

這種分配方式在必定程度上也會形成內存的浪費,好比要保存100字節的數據的時候,只能放到112Bytes的內存塊中,剩餘的12Byte內存空間被浪費。

結構中各個部分數量的計算:

Page個數 = 內存總空間 / 1MB
各個Page中Chunk的個數 = 1MB / Chunk的大小
Chunk大小計算 = 初始值 * Growth Factor

當設置緩存的時候,會根據Item的大小來決定保存到那個Slab Class中,其中Item大小爲:

key長 + value長度 + 後綴長度 + item長度大小(32個字節)

其中Memcached能夠保存的數據Item最大爲1MB。

5.Memcached典型問題分析

對於Memcached的使用中通常會出現如下問題:

1. 容量問題
單一節點沒法突破內存上限
2. 服務高可用
服務宕機會致使訪問所有穿透數據庫
3. 擴展問題
沒法突破單實例請求峯值

Memcached當達到內存上線的時候,會對內存數據進行垃圾回收,垃圾回收有兩種方式:

1.Lazy模式,Memcached不會自動去檢查數據的過時狀況,而是在查詢的時候,檢查數據的過時狀況,而後對數據進行相應處理。
2.使用LRU算法進行內存垃圾回收(最近最少使用算法)
其中垃圾回收是在Slab Class範圍內的,並非全局的LRU

對於Memcached使用集羣的方式,有兩種算法來計算緩存落在那一臺緩存機器。

方法一: key.hashCode() / 緩存節點個數
缺點:當對分佈式緩存中添加、刪除或者節點故障剔除操做中,會致使全部的歷史數據都沒法找到
方法二:使用一致性哈希算法能夠解決1中的問題
數據一致性問題怎麼解決
key衝突的問題解決

可使用明明空間,對於不一樣的系統,使用不一樣的明明空間,好比前綴:ns_

相關文章
相關標籤/搜索