事件處理
libevent是個程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能封裝成統一的接口。即便對服務器的鏈接數增長,也能發揮O(1)的性能。memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。關於事件處理這裏就再也不詳細介紹,能夠參考Dan Kegel的The C10K Problem。
存儲方式
爲了提升性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。因爲數據僅存在於內存中,所以重啓memcached、重啓操做系統會致使所有數據消失。另外,內容容量達到指定值以後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached自己是爲緩存而設計的服務器,所以並無過多考慮數據的永久性問題。
通訊分佈式
memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。各個memcached不會互相通訊以共享信息。那麼,怎樣進行分佈式呢?這徹底取決於客戶端的實現!php
事件、存儲、通訊解釋摘自百度html
如上圖所示:java
Agent1把數據分別保存在192.168.7.102:11211 和 192.168.7.103:11211分紅兩份,而且192.168.7.104:11211保留完整的備份python
Agent2把數據分別保存在192.168.7.103:11211 和 192.168.7.103:11211分紅兩份,而且192.168.7.104:11211保留完整的備份git
緣由:github
在寫的時候同時寫兩份保存在Memcached裏!能夠根據須要本身調整,基本上一個Agent便可,可是爲了冗餘使用兩個Agent是推薦的!算法
配置:apache
一、安裝Memcached (安裝memcached在192.168.7.102 192.168.7.103 192.168.7.104 並啓動端口11211)vim
yum -y install memcached #安裝軟件 /usr/bin/memcached -d -u root -l 192.168.7.102 -m 1024 -p 11211#啓動服務 /usr/bin/memcached -d -u root -l 192.168.7.103 -m 1024 -p 11211#啓動服務 /usr/bin/memcached -d -u root -l 192.168.7.104 -m 1024 -p 11211#啓動服務 #命令解釋: ''' 啓動Memcache 經常使用參數 -p <num> 設置TCP端口號(默認不設置爲: 11211) -U <num> UDP監聽端口(默認: 11211, 0 時關閉) -l <ip_addr> 綁定地址(默認:全部都容許,不管內外網或者本機更換IP,有安全隱患,若設置爲127.0.0.1就只能本機訪問) -d 以daemon方式運行 -u <username> 綁定使用指定用於運行進程<username> -m <num> 容許最大內存用量,單位M (默認: 64 MB) -P <file> 將PID寫入文件<file>,這樣可使得後邊進行快速進程終止, 須要與-d 一塊兒使用 '''
二、安裝Magent (安裝Magent在192.168.7.100 192.168.7.101)數組
cd /usr/local/ mkdir ./magent cd ./magent wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz tar xzvf ./magent-0.6.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
#/usr/bin/env python #-*- coding:utf-8 -*- import memcache mc = memcache.Client(['192.168.7.100:11211'],debug=True) mc.set('Timluo','1',60) mc.set('Timluo2','2',60) mc.set('Timluo3','3',60) mc.set('Timluo4','4',60) mc.set('Timluo5','5',60) mc.set('Timluo6','6',60)
五、能夠經過telnet 192.168.7.102 或 192.168.7.103 或 192.168.7.104 上直接get keyname去獲取值看看是否能夠正常獲取是否已經正常存儲了!或者安裝管理工具Memadmin查看
''' telnet 192.168.7.102 11211 get Timluo1 VALUE Timluo1 0 1 1 ..... ......... '''
yum -y install httpd
二、安裝php的memcache擴展包php-pecl-memcache
yum -y install php-pecl-memcache
三、修改apache配置文件添加php
vim /etc/httpd/conf/httpd.conf line:420 DirectoryIndex index.html index.html.var index.php #新增index.php
四、下載MemAdmin
git clone https://github.com/junstor/memadmin #若是沒有安裝git請自行安裝
五、啓動apache服務
/etc/init.d/httpd start
六、登陸WEB MemAdmin
http://192.168.7.101/memadmin #默認密碼在config.php中能夠本身定義
七、添加管理(圖形界面不在解釋,請自行添加)