1、Memcached介紹
Memcached是一款開源的,高性能的分佈式純內存緩存服務軟件,Mem就是內存的意思,cache緩存的意思,d是daemon的意思。Memcache項目誕生於2003年,Memcache服務分爲客戶端和服務端兩部分,client/server。
客戶端軟件:Memcache-2.2.7.tar.gz
服務端軟件:Memcached-1.4.13.tar.gz
2、Memcached 做用
1.Memcached 純內存,用來緩存後端數據庫的數據,博文,貼子,用戶信息。php
2.用來實現集羣架構中的 "session" 會話共享存儲前端
Memcachedb 內存加磁盤 sina開發,Memcached+BDB。用來緩存後端數據庫的數據(博文,貼子,用戶信息),能夠直接作數據庫用(微薄粉絲關注,統計),mysql補充。
Redis 內存加磁盤,做用同Memcachedb,支持主從複製,持久化等,數據類型更豐富,做爲mysql的補充,redis。
Squid,nginx,varnish,ats web緩存,放在web前端。緩存靜態圖片,JS,CSS,HTML,視頻。CDN就是利用這類軟件作的分佈式緩存。
3、Memcached工做原理
1.C/S架構,2000多行代碼,C語言編寫
2.基於libevent事件處理,異步IO模型(epoll事件模型)
3.數據以key/value鍵值對的形式存在
4.純內存訪問,重啓數據丟失
5.多個集羣節點互不聯繫(集羣調度算法,通常用一致性HASH)
4、安裝memcached服務端實戰及測試mysql
安裝memcached服務端實戰:
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
ls libevent-1.4.13-stable.tar.gz
tar xf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure
make
make install
tar xf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure
make
make install
啓動:
memcached -d -c 10240 -p 11211 -m 16 -P /var/run/memcached.pid -u root
memcached -d -c 10240 -p 11212 -m 16 -P /var/run/memcached1.pid -u root -l 10.0.0.6
關閉:
pkill memcached
啓動參數解釋:
-p :指定端口
-m :指定memcached服務能夠緩存數據的最大內存,默認爲64M。
-u :指定運行memcached服務的用戶
-d :做爲守護進程在後臺運行
-c :指定memcached服務的最大的併發鏈接數,默認是1024,按照服務器的併發訪問量來設定。
-P :設置保存memcached的pid文件
-l :指定監聽的服務器IP地址
-f : 調優因子nginx
[root@LB-111-06 ~]# netstat -tunlp|grep mem #memcache服務端memcached
tcp 0 0 10.0.0.6:11211 0.0.0.0:* LISTEN 1594/memcached
udp 0 0 10.0.0.6:11211 0.0.0.0:* 1594/memcached web
測試服務端安裝成果:
[root@LB-111-06 ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 10.0.0.6 11211
STORED
[root@LB-111-06 ~]# printf "get key008\r\n"|nc 10.0.0.6 11211 redis
VALUE key008 0 10
oldboy0987
END
[root@LB-111-06 ~]# printf "delete key008\r\n"|nc 10.0.0.6 11211
DELETED
[root@LB-111-06 ~]# printf "get key008\r\n"|nc 10.0.0.6 11211
END
Memcached狀態查看:
stats settings 能夠查看一些memcached 設置 例如 線程數。。。
stats slabs 查看slabs 相關狀況
stats items 查看Items 相關狀況
stats sizes 查看存在的Item 個數和大小
stats cachedump 查看 key value
stats reset 清理統計數據算法
安裝memcache客戶端
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar xf memcache-2.2.7.tgz #在web服務器上安裝
cd memcache-2.2.7
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir
make
make install
sql
實現集羣中的session共享存儲:
diff php.ini php.ini
< session.save_handler = "memcache"
---
> session.save_handler = files
1490c1490
< session.save_path = "tcp://10.0.0.6:11211"
---
> ;session.save_path = "/tmp"
注意說明:
上面實例是在lamp/lnmp環境中通用的方法,另一種方法是單獨在lamp或者lnmp下實現,不用修改php.ini文件,直接修改下面對應的配置文件:
1)lamp
在 httpd.conf 對應的虛擬主機中添加(能夠針對每一個虛擬主機進行memcached共享session)
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"
2)lnmp
在 php-fpm.conf 對應的pool中添加
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"
3)、檢測是否鏈接成功
[root@centos memcache-2.2.7]# /usr/local/php/bin/php -m |grep memcache #有memcache模塊
memcache
數據庫
獲取Memcached服務的狀態信息並解讀重點:
[root@LB-111-06 tools]# printf "stats\r\n"|nc 10.0.0.6 11211
STAT pid 5409
STAT uptime 97543
STAT time 1446485025
STAT version 1.4.24
STAT libevent 1.4.14b-stable
STAT pointer_size 64
STAT rusage_user 1.977699
STAT rusage_system 2.254657
STAT curr_connections 5
STAT total_connections 27
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 25
STAT cmd_set 19
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 23
STAT get_misses 2
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 2364
STAT bytes_written 991
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 319
STAT curr_items 4
STAT total_items 19
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
[root@LB-111-06 tools]# printf "stats\r\n"|nc 10.0.0.6 11211|grep get
STAT cmd_get 25 #請求25次
STAT get_hits 23 #成功獲取(命中)23次
STAT get_misses 2 #丟失兩次
後端
注:用memadmin工具也能夠查詢命中率!!@!!