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時,不會進行快取,當設定...