memcached總結

目錄前端

  • 做用
  • 應用場景
  • 工做流程
  • 集羣實現方式
  • 特色和原理
  • 刪除和cache機制
  • 安裝部署

1、memcached是什麼,有什麼做用?


    高性能的內存的緩存系統。
    經過在實現規劃好的內存空間中臨時緩存數據庫中的各項數據,來達到減小直接對數據庫的直接高併發訪問,從而達到提高數據庫的訪問性能,加網站集羣動態應用服務的能力。

    簡單說就是經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態web應用的速度和擴展性。git


2、在企業集羣架構中應用場景


    A:做爲數據庫的前端緩存應用  

  a/    完整緩存,靜態緩存
        商品信息,事前放到內存裏,而後在對外提供訪問。預熱。用戶訪問時只讀取memched緩存,就不用讀數據庫。
    b/    熱點緩存
        需前端web程序配合,只緩存熱點數據,即緩存常常被訪問的數據。
        先預熱數據庫裏的基礎數據,而後動態更新。所謂動態更新,程序先讀取緩存,若是緩存裏面沒有對應數據,再去讀取數據庫,而後程序把讀到的數據放入緩存。

        一、 電商秒殺,雙十一等高併發業務。例如,小米秒殺只獲取資格,而不是瞬間秒殺到手商品。只更改用戶狀態,節省服務器資源。
        二、若是數據更新,同時出發緩存更新,避免給客戶過時數據。

    c/    對於持久化存儲系統。好比redis,能夠替代一部分數據庫的存儲,一些簡單的數據業務,投票,統計,好友統計等github

    B:session會話共享存儲

 


3、在不一樣企業業務場景中的工做流程



    a   當web程序須要訪問後盾數據庫獲取數據時,會優先訪問memcached內存緩存。若是緩存中有對應數據就直接放回給前端及用戶;若是沒有數據,也就是沒有命中,再由程序請求數據庫,獲取到數據後除了返回給客戶,還會把數據放入到memcaced中,以便下次請求被訪問。memcached始終是數據庫的擋箭牌,從而減輕數據庫的壓力,提升整個網站的相應速度。
    b   當程序更新、修改、殺出等操做時,會同時發送請求通知memcached已經緩存的數據失效,從而保證緩存的數據和數據庫中的一致。
    若是是在高併發場合,除了通知過時緩存失效外,還會經過相關機制,使用戶訪問新數據前,經過程序預先把更新過的數據推送到memcached中緩存起來。這樣能夠減小數據庫的訪問壓力,提高命中率。


web

4、服務分佈式集羣如何實現?


    memcached集羣和普通集羣的區別:全部memcached的數據綜合纔是數據庫的綜合。
    
    a  程序實現
    程序加載全部memcached的ip列表,經過對key作一致性哈希
    一致性hash,目的是不但保證每一個對象只請求一個對應的服務器,並且當節點宕機緩存服務器的更新從新分配比例降到最低。
    b  負載均衡器/代理,如magnetredis

一、安裝 
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz  
tar zxvf magent-0.5.tar.gz  
/sbin/ldconfig  
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile  
make  
cp magent /usr/bin/magent   算法

二、命令詳解數據庫

  -h this message
  -u uid
  -g gid
  -p port, default is 11211. (0 to disable tcp support)
  -s ip:port, set memcached server ip and port
  -b ip:port, set backup memcached server ip and port
  -l ip, local bind ip address, default is 0.0.0.0
  -n number, set max connections, default is 4096
  -D do not go to background
  -k use ketama key allocation algorithm
  -f file, unix socket path to listen on. default is off
  -i number, max keep alive connections for one memcached server, default is 20
  -v verbose
三、啓動
    magent -u root -n 51200 -l 192.168.1.2 -p 12000 -s 192.168.1.4:11211 -s 192.168.1.5:11211192.168.1.5:11211

5、特色和原理

  •         徹底基於內存,沒有持久性存儲的設計,一旦重啓,數據丟失
  •         異步I/O模型, 使用libevent模型的事件通知機制
  •         節點之間相互獨立
  •         被緩存的數據是以鍵值對形式存在的
  •         能夠設定過時時間,過時後自動刪除。是在訪問的時候刪除,根據時間戳判斷
  •         內存分配機制是對特定的內存進行分塊,再把多個塊分爲一組

6、刪除和cache機制

    cache機制是LRU(最近最少用)算法,加上item過時失效。若是內存不夠用了,過時的會最早被替換,接着是lru算法算出來的。
    -m能夠指定不被刪除緩存

7、安裝部署

一、下載

wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

二、安裝
# tar zxvf libevent-*.tar.gz
# cd libevent-2.0.21
# ./configure –prefix=/usr/local/libevent
# make
# make install
#測試是否安裝成功
# ls -al /usr/lib | grep libevent


# tar zxvf memcached-1.4.15.tar.gz
# cd memcached-1.4.15

#這裏安裝的時候須要制定libevent的安裝路徑
#   ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
# make
# make install

#檢查是否安裝成功
# ls -al /usr/local/bin/mem*

三、啓動

/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

 啓動參數說明:
-d 選項是啓動一個守護進程。
-u root 表示啓動memcached的用戶爲root。
-m 是分配給Memcache使用的內存數量,單位是MB,默認64MB。
-M return error on memory exhausted (rather than removing items)。
-u 是運行Memcache的用戶,若是當前爲root 的話,須要使用此參數指定用戶。
-p 是設置Memcache的TCP監聽的端口,最好是1024以上的端口。
-c 選項是最大運行的併發鏈接數,默認是1024。
-P 是設置保存Memcache的pid文件。

四、測試
[root@localhost /]# telnet 192.168.141.64 12000
Trying 192.168.141.64...
Connected to 192.168.141.64 (192.168.141.64).
Escape character is '^]'.
set key1 0 60 4
zhou
STORED
get key1
VALUE key1 0 4
zhou
END

備註:
參數詳細說明
memcached 1.4.2  
-p       監聽的TCP端口(默認: 11211)  
-U       監聽的UDP端口(默認: 11211, 0表示不監聽)  
-s      用於監聽的UNIX套接字路徑(禁用網絡支持)  
-a      UNIX套接字訪問掩碼,八進制數字(默認:0700)  
-l   監聽的IP地址。(默認:INADDR_ANY,全部地址)  
-d            做爲守護進程來運行。  
-r            最大核心文件限制。  
-u  設定進程所屬用戶。(只有root用戶可使用這個參數)  
-m       單個數據項的最大可用內存,以MB爲單位。(默認:64MB)  
-M            內存用光時報錯。(不會刪除數據)  
-c       最大併發鏈接數。(默認:1024)  
-k            鎖定全部內存頁。注意你能夠鎖定的內存上限。  
              試圖分配更多內存會失敗的,因此留意啓動守護進程時所用的用戶可分配的內存上限。  
              (不是前面的 -u  參數;在sh下,使用命令"ulimit -S -l NUM_KB"來設置。)  
-v            提示信息(在事件循環中打印錯誤/警告信息。)  
-vv           詳細信息(還打印客戶端命令/響應)  
-vvv          超詳細信息(還打印內部狀態的變化)  
-h            打印這個幫助信息並退出。  
-i            打印memcached和libevent的許可。  
-P      保存進程ID到指定文件,只有在使用 -d 選項的時候纔有意義。  
-f    塊大小增加因子。(默認:1.25)  
-n     分配給key+value+flags的最小空間(默認:48)  
-L            嘗試使用大內存頁(若是可用的話)。提升內存頁尺寸能夠減小"頁表緩衝(TLB)"丟失次數,提升運行效率。  
              爲了從操做系統得到大內存頁,memcached會把所有數據項分配到一個大區塊。  
-D      使用  做爲前綴和ID的分隔符。  
              這個用於按前綴得到狀態報告。默認是":"(冒號)。  
              若是指定了這個參數,則狀態收集會自動開啓;若是沒指定,則須要用命令"stats detail on"來開啓。  
-t       使用的線程數(默認:4)  
-R            每一個鏈接可處理的最大請求數。  
-C            禁用CAS。  
-b            設置後臺日誌隊列的長度(默認:1024)  
-B            綁定協議 - 可能值:ascii,binary,auto(默認)  
-I            重寫每一個數據頁尺寸。調整數據項最大尺寸。  

服務器

相關文章
相關標籤/搜索