一、Memcahced簡介
1.mamcached:緩存服務
開源高性能,支持分佈式的內存緩存系統。應用於用到公共緩存的系統中,它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。
在Linux上安裝程序爲memcached程序包,監聽端口11211/tcp,11211/udp
2.memcached特性
(1)K/V緩存:鍵值數據(可序列化數據)模型緩存,key引用,value數據內容。鍵不能相同,有過期時間
(2)存數在內存中hash表中,斷電不復存在。是硬件存儲的補充
(3)僅僅是一個緩存,非代理,需要用戶自己去發起讀取數據請求;功能的實現一半以來於服務端,一半以來於客戶端
(4) 支持分佈式緩存,各服務器之間互不通信,當一臺主機出現不問僅影響本機存儲緩存;
(5)O(1)的執行效率,每秒百萬次讀寫請求
(6)清理過期數據:LRU(最近最少使用算法)。清理分割惰性緩存管理機制,數據過期且內存夠用不會主動刪除,但時查詢不到。使用到該空間時候會直接覆蓋
3.memcached內存空間分配
memcached僅是一個內存存儲最終數據還是要存儲在strore中,限制其發展;基於內存的存儲緩存使用過期時長不同而導致內存回收後的內存碎片問題,使得使用率不高,所以memcahced預劃分好內存空間片段,切割多類別的緩存空間塊(Chunk),並把尺寸相同的塊分成組,緩存數據時候會找一個最小能容納的空間,若放入的類別中仍有空閒,會放棄使用空間。
Slab Allocation術語:
Page:分配給Slab的內存空間,默認是1MB。分配給Slab之後根據slab的大小切割成Chunk
Chunk:用於緩存記錄的內存空間
Slab Class:特定大小的chunk的組
二、安裝和命令行使用
1.程序安裝
(1)memcached程序安裝
[root@localhost~]#yum install memcached
[root@localhost~]# systemctl start memcached.service
程序配置:/etc/sysconfig/memcached
[root@localhost~]# cat /etc/sysconfig/memcached
(2)php連接memcached服務器
php和memcached有兩種擴展:php-pecl-memcache、php-pecl-memcached
[root@localhost~]# yum install php-pecl-memcache
2.基於命令行用法
memcahced程序鍵值的設定和調用一般只能基於命令行模式或者程序調用
存儲類命令 | set, add, replace, append, prepend |
獲取數據類命令 | get, delete, incr/decr |
統計類命令 | stats, stats items, stats slabs, stats sizes |
清理 | flush_all |
3.memchached常用選項
memcached [OPTIONS]
-l IP | 監聽的IP地址;默認爲 |
-d | 運行爲守護進程 |
-u USERNAME | 以USERNAME用戶身份運行程序 |
-m <num> | 用於緩存數據的內存空間大小,單位爲MB,默認爲64; |
-c <num> | 最大併發連接數; |
-p PORT | tcp端口 |
-U PORT | UDP端口 |
-t <num> | 用於處理請求的最大線程數; |
-M | 用於緩存的內存耗盡時,返回錯誤信息,不是lRU(最近最小使用)算法清理 |
-f <num | growth factor, 增長因子;內存劃分大小增長,默認1.5倍 |
-n <num>: | 指明最小的slab大小,默認是96; |