Memcached存儲session

Memcached介紹

是國外社區網站LiveJournal團隊開發,經過緩存數據庫查詢結果,減小數據庫訪問次數,從而提升動態web站點性能。官方站點 http://memcached.org/  
基於c/s架構,協議簡單
基於libevent的事件處理
自主內存存儲處理(slab allowcation)
數據過時方式:Lazy Expiration 和 LRU

memcached數據流

Memcached存儲session

Slab allocation

  • Slab Allocation的原理——將分配的內存分割成各類尺寸的塊(chunk), 並把尺寸相同的塊分紅組(chunk的集合),每一個chunk集合被稱爲slab。
  • Memcached的內存分配以Page爲單位,Page默認值爲1M,能夠在啓動時經過-I參數來指定。
  • Slab是由多個Page組成的,Page按照指定大小切割成多個chunk。其結構如圖
    Memcached存儲session

    Memcached安裝啓動

  • yum install -y epel-release
  • centos6
  • yum install -y libevent  memcached libmemcached 
  • 啓動 /etc/init.d/memcached start
  • centos7
  • yum install -y memcached-devel libevent-devel libmemcached-devel
  • 啓動 /etc/init.d/memcached start
  • ps aux |grep memcached
  • memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
  • 相關的參數在/etc/init.d/memcached和/etc/sysconfig/memcached中定義

    Growth factor

  • memcached在啓動時經過-f選項能夠指定 Growth Factor因子。該值控制chunk大小的差別。默認值爲1.25。
  • 經過memcached-tool查看指定memcached實例的不一樣slab狀態,能夠看到各Item所佔大小(chunk大小)差距爲1.25
  • 命令:#memcached-tool 127.0.0.1:11211 display

Memcached數據過時方式

  • Lazy Expiration 
    memcached 內部不會監視記錄是否過時,而是在get時查看記錄的時間戳,檢查記錄是否過時。這種技術被稱爲lazy(惰性)expiration。所以,memcached不會在過時監視上耗費CPU時間。
  • LRU
    memcached會優先使用已超時的記錄的空間,但即便如此,也會發生追加新記錄時空間不足的狀況,此時就要使用名爲Least Recently Used(LRU)機制來分配空間。顧名思義,這是刪除「最近最少使用」的記錄的機制。所以,當內存空間不足時(沒法從slab class獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。從緩存的實用角度來看,該模型十分理想。

Memcached啓動時參數

  • -d選項是啓動一個守護進程
  • m是分配給Memcache使用的內存數量,單位是MB,這裏是200MB 
  • -u是運行Memcache的用戶,若是當前爲 root 的話,須要使用此參數指定用戶。 
  • -l是監聽的服務器IP地址
  • -p是設置Memcache監聽的端口,默認是11211
  • -c選項是最大運行的併發鏈接數,默認是1024
  • -P是設置保存Memcache的pid文件 

查看memcached運行狀態

  • memcached-tool 127.0.0.1:11211  stats
  • 或者echo stats |nc 127.0.0.1 11211  須要安裝nc工具  yum install -y nc
  • 若安裝libmemcached後,可使用命令 
  • memstat --servers=127.0.0.1:11211 查看memcached服務狀態

    php鏈接memcached

    先安裝php的memcache擴展
    # wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz
    # tar zxf memcache-2.2.3.tgz
    # cd memcache-2.2.3
    # /usr/local/php/bin/phpize
    # ./configure --with-php-config=/usr/local/php/bin/php-config
    # make && make install
    安裝完後會有相似這樣的提示:
    Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
    # ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
    memcache.so  opcache.a  opcache.so  redis.so
    把這個記住,而後修改php.ini,把 extension_dir = "./" 修改成extension_dir = "/usr/local/servers/php5/lib/php/extensions/no-debug-non-zts-20090626/"
    並添加一行
    extension="memcache.so"
    添加以後檢查對不對
    /usr/local/php/bin/php -m看看有沒有memcache

    PHP鏈接Memcached 檢驗

    /usr/local/php/bin/php -m |grep memcache
    下載測試php腳本 
    curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
    /usr/local/php/bin/php 1.php
    或者將1.php放到某個虛擬主機根目錄下面,在瀏覽器訪問,便可看到效果
    最終能夠看到數據以下:
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd

    Memcached 實現session共享

    本實例是在lamp/lnmp環境下實現
    編輯php.ini添加兩行
    session.save_handler = memcache
    session.save_path = "tcp://192.168.0.9:11211"  
    或者httpd.conf中對應的虛擬主機中添加
    php_value session.save_handler "memcache"
    php_value session.save_path "tcp://192.168.0.9:11211"  
    或者php-fpm.conf對應的pool中添加
    php_value[session.save_handler] = memcache
    php_value[session.save_path] = " tcp://192.168.0.9:11211 "

    Memcached session測試

    wget http://study.lishiming.net/.mem_se.txt
    mv .mem_se.txt  /usr/local/apache2/htdocs/session.php
    curl localhost/session.php 
    相似於1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440
    telnet 127.0.0.1 11211
    get i44nunao0g3o7vf2su0hnc5440
相關文章
相關標籤/搜索