memcached 快取伺服器

2021-09-08 17:19:14 字數 3507 閱讀 7668

memcached 是高效能的

分布式記憶體快取伺服器。

一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web應用的速度、提高可擴充套件性。

主要特點:

1、c/s架構,協議簡單;

2、基於libevent的事件處理(epoll);

3、slab allocation記憶體管理機制;

4、基於客戶端的分布式;

memcached 的安裝:

yum -y install libevent-devel

wget

./configure --prefix=/usr/local/memcached

make && make install

memcached中儲存的資料都在記憶體中,因此重啟memcached,會導致全部資料丟失;

另外,記憶體容量達到指定值之後,就基於lru(least recently used)演算法自動刪除不使用的快取;

memcached的限制:

1、儲存的item數量沒有限制,只要記憶體足夠;

2、最長30天的資料過期時間,由常量realtime_maxdelta 60*60*24*30控制;

3、最大鍵長為250位元組,由常量key_max_length 250控制;

4、單個item最大資料是1mb,由常量power_block 1048576控制;

5、最大同時連線數是200,通過conn_init中的freetotal控制;最大軟連線是1024,通過settings.maxconns=1024控制;

memcached的分布式:consistent hashing

memcached伺服器端並沒有分布式功能,因此,分布式完全依賴於客戶端的實現。

客戶端程式採用一致性雜湊演算法,為不同的鍵選取不同的memcached伺服器進行儲存。

consistent hashing演算法:

1、求出memcached伺服器(節點)的雜湊值,並將其配置到0~2^32的圓上;

2、用同樣的方法求出key的雜湊值,並對映到圓上,然後從資料對映的位置開始順時針查詢,將資料儲存到找到的第乙個伺服器上。

1、memcached命令列選項:

-p          指定tcp監聽埠,預設為11211

-m         最大記憶體大小,預設64mb

-d          作為daemon在後台啟動

-vv          very verbose模式啟動, 除錯資訊和錯誤資訊輸出到控制台

-f          指定growth factor,預設1.25

-m          禁用lru,記憶體耗盡後返回錯誤

-c          最大併發連線數,預設1024

-u          指定username(僅在以root啟動程序時)

-p          指定pid檔案路徑

例如,以守護程序啟動memcache

./memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -p /tmp/memcached.pid 

2、客戶端連線到memcached伺服器:

telnet 127.0.0.1 12000 

(輸入quit命令退出連線)

常用命令

命令命令說明

儲存命令(格式如下)

set向快取新增新的鍵值對,若鍵已經存在,則替換之

add僅當快取中不存在鍵時,才向快取新增乙個鍵值對;如果key已存在,操作失敗

replace

僅當鍵已存在時,才會替換快取中的鍵;如果key不存在,操作失敗

在已有的快取資料後新增,如果key不存在,返回not_stored

prepend

caschecked and set的意思,只有當最後乙個引數和gets所獲取的引數匹配時才能儲存,否則返回「exists」

incr 

自增,incr key value,對數字型value自增乙個值

decr

自減

讀取命令

get查詢鍵,比如 get key1, key2 ...

gets

gets命令比普通的get命令多返回了乙個數字,這個數字可以檢查資料是否發生改變

delete

刪除鍵flush_all 

清空cache

狀態命令

stats

檢視memcached伺服器基本狀態

stats cachedump slab_id limit_num

儲存命令的格式

引數說明:set/add/replace

查詢關鍵字

客戶機使用它儲存關於鍵值對的額外資訊

該資料的存活時間,0表示永不過期

儲存位元組數

儲存的資料塊(可直接理解為key-value結構中的value)

例子1:

memcached的記憶體管理機制:slab allocation

1、將分配的記憶體分割成各種尺寸的塊(chunk),並把尺寸相同的塊分成組(chunk的集合)==>解決記憶體碎片問題

memcached在啟動時指定growth factor因子(-f選項),就可以控制slab之間的差異,預設值為1.25。

2、分配到的記憶體不會釋放,而是重複利用==>避免頻繁的呼叫malloc和free

3、memcached根據收到的資料大小,選擇最適合資料大小的slab。

幾個概念術語:

page:分配給slab的記憶體空間,預設是1mb;

chunk:用於快取記錄的記憶體空間;

slab class:特定大小的chunk的組;

lazy expiration:memcached內部不會監視記錄是否過期,而是在get時檢視記錄的時間戳,檢查記錄是否過期。

記錄超時後,memcached也不會釋放已分配的記憶體,而是將其標記為可重用。

lru:當記憶體空間不足時(無法從slab class獲取到新空間),就從最近未被使用的記錄中搜尋,並將其空間分配給新紀錄。

memcached快取,「分布式」 快取伺服器

memcached快取,分布式 快取伺服器,其本身沒有分布式功能,且各個memcached快取之間不會通訊與共享,因此其分布式取決客戶端的實現 也就是說客戶端存資料,可能存到不同的memcached,但取的時候直接取不用管存在哪乙個memcached。mem new memcached 新增多個me...

memcached快取伺服器的安裝收藏

libevent 1.3.tar.gz memcached 1.2.2.tar.gz 2.解壓縮 libevent 1.3.tar.gz 編譯安裝 tar zxvf libevent 1.3.tar.gz cd libevent 1.3 configure prefix usr local libe...

伺服器快取

快取可以在客戶端和伺服器中做,要是之間還有 也可能對響應進行快取。是將客戶端和伺服器連線在一起,作為中間人角色,可以將客戶端請求響應的內容進行快取,在下次客戶端快取時,直接返回快取結果,提高效能。快取控制是在http頭資訊中cache control設定,當設成private時,不會進行快取,當設定...