1. 程式人生 > >Memcached入門

Memcached入門

服務器 linux 主程序 接口 開發

memcached是一個免費開源的,高性能的,具有分布式對象的緩存系統,它可以用來保存一些經常存取的對象或者數據,保存的數據像一張巨大的hash表,該表示已key-value對的方式保存在內存中。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。

為什麽會有memcache和memcached兩種名稱呢?
memcache是這個項目的名稱,而memcached是它服務器端的主程序的文件名。

memcached特征:

  • 協議簡單
    它是基於文本行的協議,直接通過telnet在memcached服務器上可以進行存取數據的操作

  • 基於libevent事件處理
    libevent是一套利用c開發的程序庫,它將BSD系統的kqueue,linux系統的epoll等事件處理功能封裝成一個接口,與傳統的select,提高了性能

  • 內置的內存管理方式
    所有的數據都是保存在內存中的,所以存取數據要比硬盤要快,當內存滿了之後,會通過LRU算法自動刪除不使用的緩存,但是沒有考慮數據的容災問題,重啟問題,所有的數據會丟失

  • 分布式
    各個memcached服務器之間乎不同心,各自獨立存取數據,不共享任何信息。服務器並不具有分布式功能,分布式部署取決於memcached客戶端

memcache的安裝
分為兩個過程:

  1. memcache服務器端的安裝
    就是在服務器(一般都是linux系統)上安裝memcached實現數據的存儲

  2. memcached客戶端的安裝
    在程序中去使用服務器端的memcache提供的函數

Memcache的工作流程:

先檢查客戶端的請求出具是否在memcached中,如果存在,則直接將數據返回,不再對數據庫進行任何操作;如果請求的數據不再memcached中,就會先去查詢數據庫,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(這個過程需要服務端程序去實現);每次更新數據庫的同時 更新memcached中的數據,保證一致性;當分配給memcached內存空間用完之後,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,然後再替換掉最近未使用的數據。

memcached的內存算法:

memcached利用slab allocation機制來分配和管理內存,它按照預先規定的大小,將分配的內存分割成特定長度的內存塊,再把尺寸相同的內存塊分成組,數據在存放時,根據鍵值大小去批判匹配slab大小,找就近的slab存放,所以存在空間浪費現象。

傳統的內存管理方式:使用完通過maclloc分配的內存後通過free來回收內存,這種方式容易產生內存碎片,並降低操作系統對內存的管理效率。

memcached的緩存策略:

memcached的緩存策略是LRU(最近最少使用)加上到期失效策略。當你在memcached內存存儲數據是,有可能會指定它在緩存的失效時間,默認為永久。當memcached服務器用完分配的內存是,失效的數據的數據首先被替換,然後是最近未使用的數據。在LRU中,memcached使用的是一種Lazy Expiration策略,自己不會監控存入的key/value對是否過期,而是在獲取key值時查看記錄的時間戳,檢查key/value對空間是否過期,這樣可減輕服務器的負載。

分布式算法:

  1. 余數算法
    先球的鍵的整數散列值,再除以服務器臺數,根據余數確定存取服務器,這種方法計算簡單,高效,但在memcached服務器動態增減的時候,幾乎所有的緩存都會失效

  2. 散列算法
    先算出memcached服務器的散列值,並將其分布到0到2的32次方的圓上,最後從數據映射到的位置開始順時針查找,將數據保存到查找到的第一臺服務器上,如果超過2的32次方,還是找不到服務器,就將數據保存到第一臺memcached服務器上,如果添加一臺memcached服務器,只在圓上增加服務器的逆時針方向的第一臺服務器上的鍵會受到影響。

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進程
kill cat /tmp/memcached.pid # 結束memcached進程

啟動參數介紹如下:

  • -d 選項是啟動一個守護進程,

  • -m 是分配給Memcache使用的內存數量,單位是MB,這裏是10MB,

  • -u 是運行Memcache的用戶,這裏是root,

  • -l 是監聽的服務器IP地址,如果有多個地址的話,這裏指定了服務器的IP地址192.168.0.200,

  • -p 是設置Memcache監聽的端口,這裏設置了12000,最好是1024以上的端口,

  • -c 選項是最大運行的並發連接數,默認是1024,這裏設置了256,按照服務器的負載量來設定,

  • -P 是設置保存Memcache的pid文件,我這裏是保存在 /tmp/memcached.pid,也可以啟動多個守護進程,不過端口不能重復。

測試memcached

[[email protected] 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安裝完成!


Memcached入門