memcached是一個免費開源的,高性能的,具備分佈式對象的緩存系統,它能夠用來保存一些常常存取的對象或者數據,保存的數據像一張巨大的hash表,該表示已key-value對的方式保存在內存中。簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。linux
爲何會有memcache和memcached兩種名稱呢?
memcache是這個項目的名稱,而memcached是它服務器端的主程序的文件名。算法
memcached特徵:shell
memcache的安裝
分爲兩個過程:數據庫
Memcache的工做流程:緩存
先檢查客戶端的請求出具是否在memcached中,若是存在,則直接將數據返回,再也不對數據庫進行任何操做;若是請求的數據再也不memcached中,就會先去查詢數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(這個過程須要服務端程序去實現);每次更新數據庫的同時 更新memcached中的數據,保證一致性;當分配給memcached內存空間用完以後,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,而後再替換掉最近未使用的數據。服務器
memcached的內存算法:併發
memcached利用slab allocation機制來分配和管理內存,它按照預先規定的大小,將分配的內存分割成特定長度的內存塊,再把尺寸相同的內存塊分紅組,數據在存放時,根據鍵值大小去批判匹配slab大小,找就近的slab存放,因此存在空間浪費現象。分佈式
傳統的內存管理方式:使用完經過maclloc分配的內存後經過free來回收內存,這種方式容易產生內存碎片,並下降操做系統對內存的管理效率。memcached
memcached的緩存策略:函數
memcached的緩存策略是LRU(最近最少使用)加上到期失效策略。當你在memcached內存存儲數據是,有可能會指定它在緩存的失效時間,默認爲永久。當memcached服務器用完分配的內存是,失效的數據的數據首先被替換,而後是最近未使用的數據。在LRU中,memcached使用的是一種Lazy Expiration策略,本身不會監控存入的key/value對是否過時,而是在獲取key值時查看記錄的時間戳,檢查key/value對空間是否過時,這樣可減輕服務器的負載。
分佈式算法:
memcached安裝
先安裝libevent
# 下載libevent安裝包 wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz # 解壓 tar zxvf libevent-2.0.22-stable.tar.gz -C /usr/local/ # 進入到解壓目錄 cd /usr/local/libevent-2.0.22-stable # 配置編譯、安裝 ./configure -prefix=/usr/libevent make make install
安裝memcached
# 下載memcached的安裝包 wget http://memcached.org/files/memcached-1.4.24.tar.gz # 解壓安裝包到指定的目錄 tar zxvf memcached-1.4.24.tar.gz -C /usr/local/ # 進入解壓後的目錄 cd /usr/local/memcached-1.4.24 # 配置、編譯、安裝,注:configure時須要指定libevent的安裝路徑 ./configure -with-libevent=/usr/libevent/ -prefix=/usr/local/memcached make make install
安裝完成後,啓動memcached
/usr/local/bin/memcached -d -m 10 -u root -l 192.168.100.126 -p 12000 -c 256 -P /tmp/memcached.pid
ps -ef|grep memcached # 查看memcached進程
killcat /tmp/memcached.pid
# 結束memcached進程
啓動參數介紹以下:
測試memcached
[root@localhost memcached]# telnet 192.168.100.126 11211 Trying 192.168.100.126... Connected to 192.168.100.126. Escape character is '^]'. set key1 0 60 4 test STORED get key1 VALUE key1 0 4 test END quit Connection closed by foreign host.
memcached安裝完成!