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個,緩存不過期

常用命令列表如下:

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

2.Memcached主要特征

1.協議簡單

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

2.內置內存存儲方式

Memcached是純內存存儲,不支持持久化,因此當Memcached重啟或者機器重啟的時候所有數據會丟失。

因此會存在數據重啟無法恢復的問題

3.Memcached使用客戶端分布式

Memcached服務端沒有分布式的功能,各個實例之間並不會互相通信或者數據共享,因此需要依賴客戶端實現分布式。

3.Memcached存在的問題

1.因此會存在數據重啟無法恢復的問題  

可以通過配合持久化數據庫MemcachedDB使用  

2.無法通過key做范圍查詢

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

4.Memcached內存存儲分析

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

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

分配的內存快大小目前默認最小內存塊為:88Bytes,Growth Factor決定了內存塊增長的幅度,默認值為1.25,可以通過啟動參數配置。

這種分配方式在一定程度上也會造成內存的浪費,比如要保存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_


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM