它是一套數據緩存系統或軟件php
用於動態應用系統中緩存數據庫的數據,減小數據庫的訪問壓力,達到提高性能的效果,實際應用環境中多用於數據庫的cache的應用。它是經過預分配指定的內存空間來存儲數據html
它是一個開源的、高性能的,具備分佈式內存對象的緩存系統,它通常用來存儲常常讀取的對象或數據,如同web服務器會將一些內容緩存到客戶端本地同樣前端
memcached是一個key/value系統,系統相對於MySQL簡單不少,雖然MySQL也有cache,可是數據庫的SQL解析會耗費性能,查詢慢於memcached,另外MySQL的cache設計得更加複雜,由於要考慮事務,日誌,存儲引擎等模塊,它的性能也沒有memcached好mysql
memcached只作一件事情,簡單高效,在cache上比MySQL強,這應該容易理解數據庫的前端緩存應用:讓它來分擔數據的併發壓力,當數據更新時,可使程序通知緩存進行更新react
session會話共享的共享存儲web
它是一種內存緩存,可經過API的方式讀取內存中緩存的這些數據,當用戶須要讀取數據時,會首先訪問memcached內存緩存,若是緩存中有數據就直接返回給前端的應用程序,若是沒有,再轉發給後臺端的服務器,這時服務器除了返回數據給用戶,還會將數據更新給memcached緩存。sql
若是實際生產環境中,緩存服務器須要重啓(或者斷電),那麼緩存中的數據將會丟失,那麼這時後端的服務器 併發壓力會增大,可能會致使後端的服務器也跟着宕機,沒法提供服務, 那麼這時咱們的處理流程是這樣的: 首先從負載均衡中將 WEB 應用停掉----->讓負載均衡再也不轉發數據給 WEB---->接着啓動緩存服務器--------> 經過程序把數據庫的內容初始化到緩存服務器中------->而後將 web 應用啓用------->重啓數據庫服務器
一、設置緩存(expires)和 deflate 壓縮,能夠將一些內容直接緩存在用戶端的本地,下次訪問直接調用本地 二、 CDN 緩存靜態內容(html、圖片等),當用戶請求這些內容時直接調用 CDN 的內容,再也不請求後端服務器了 三、 Apache 和 Nginx 靜態服務器提供靜態內容(經過異步消息隊列生成靜態內容) 四、 PHP 和 JAVA 動態內容 五、數據庫的 memcached 緩存服務器 六、數據庫服務器(MYSQL) 七、數據庫的存儲服務器
協議簡單:協議使用比較簡單,使用基於文本行的協議數據庫
基於libevent的事件處理後端
它是一套C/S模式架構的軟件,在服務器端啓動服務守護進程,能夠爲memcached服務器指定監聽的IP地址、端口號、併發訪問鏈接數以及分配多少內存來處理客戶的請求參數緩存
須要被緩存的數據以key/value鍵值對的形式在服務器端預分配的內存區中,每一個被緩存的數據都有惟一的標識key
[root@cairui ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@cairui ~]# uname -r 2.6.32-696.6.3.el6.x86_64
libevent安裝
[root@cairui software]# tar xf libevent-2.1.8-stable.tar.gz [root@cairui software]# cd libevent-2.1.8-stable [root@cairui libevent-2.1.8-stable]# ./configure [root@cairui libevent-2.1.8-stable]# make [root@cairui libevent-2.1.8-stable]# make install
安裝memcached
[root@cairui libevent-2.1.8-stable]# yum install memcached [root@cairui libevent-2.1.8-stable]# find / -name memcached /etc/sysconfig/memcached /etc/rc.d/init.d/memcached /usr/bin/memcached /var/run/memcached
配置ld.so.conf路徑防止啓動時報錯
[root@cairui lib]# echo "/usr/local/lib">>/etc/ld.so.conf [root@cairui lib]# ldconfig [root@cairui lib]# which memcached /usr/bin/memcached
[root@cairui lib]# /usr/bin/memcached -h memcached 1.4.4 -p <num> TCP port number to listen on (default: 11211) #指定監聽端口 -U <num> UDP port number to listen on (default: 11211, 0 is off) -s <file> UNIX socket path to listen on (disables network support) -a <mask> access mask for UNIX socket, in octal (default: 0700) -l <ip_addr> interface to listen on (default: INADDR_ANY, all addresses) #指定監聽地址 -d run as a daemon #後臺模式啓動 -r maximize core file limit #最大的文件字符集 -u <username> assume identity of <username> (only when run as root) #指定用戶 -m <num> max memory to use for items in megabytes (default: 64 MB) #分配內存區大小 -M return error on memory exhausted (rather than removing items) -c <num> max simultaneous connections (default: 1024) #最大併發數 -k lock down all paged memory. Note that there is a limit on how much memory you may lock. Trying to allocate more than that would fail, so be sure you set the limit correctly for the user you started the daemon with (not for -u <username> user; under sh this is done with 'ulimit -S -l NUM_KB'). -v verbose (print errors/warnings while in event loop) -vv very verbose (also print client commands/reponses) #以very verbose模式啓動 -vvv extremely verbose (also print internal state transitions) -h print this help and exit -i print memcached and libevent license -P <file> save PID in <file>, only used with -d option #設置保存memcached的PID -f <factor> chunk size growth factor (default: 1.25) -n <bytes> minimum space allocated for key+value+flags (default: 48) -L Try to use large memory pages (if available). Increasing the memory page size could reduce the number of TLB misses and improve the performance. In order to get large pages from the OS, memcached will allocate the total item-cache in one large chunk. -D <char> Use <char> as the delimiter between key prefixes and IDs. This is used for per-prefix stats reporting. The default is ":" (colon). If this option is specified, stats collection is turned on automatically; if not, then it may be turned on by sending the "stats detail on" command to the server. -t <num> number of threads to use (default: 4) -R Maximum number of requests per event, limits the number of requests process for a given connection to prevent starvation (default: 20) -C Disable use of CAS -b Set the backlog queue limit (default: 1024) -B Binding protocol - one of ascii, binary, or auto (default) -I Override the size of each slab page. Adjusts max item size (default: 1mb, min: 1k, max: 128m)
[root@cairui lib]# memcached -p 11111 -u root -c 1024 -d [root@cairui lib]# lsof -i:11111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME memcached 17416 root 26u IPv4 90768 0t0 TCP *:vce (LISTEN) memcached 17416 root 27u IPv4 90785 0t0 UDP *:vce [root@cairui lib]# netstat -lntup|grep mem tcp 0 0 0.0.0.0:11111 0.0.0.0:* LISTEN 17416/memcached udp 0 0 0.0.0.0:11111 0.0.0.0:* 17416/memcached
寫入數據
[root@cairui ~]# printf "set key001 0 0 10\r\ntest123456\r\n"|nc 127.0.0.1 11111 #寫入數據 STORED [root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111 #查詢數據 VALUE key001 0 10 test123456 END [root@cairui ~]# printf "delete key001\r\n"|nc 127.0.0.1 11111 #刪除數據 DELETED [root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111 END
正確關閉 memcached 服務 通常啓動時最好指定下 PID [root@LVS-2 ~]# memcached -p 11213 -u root -m 16m -c 1024 -d -P /var/run/11213.pid #指定進程文件 [root@LVS-2 ~]# kill `cat /var/run/11213.pid` 提示:實際生產環境中,要佈署 memcached 服務,作爲數據緩存,內存的指定大小是根據業務來肯定,是否是須要負載均衡?最好同開發一塊兒討論肯定好,還有它還有分客戶端與服務端 配置 session 會話共享存儲 vi /applicaton/php/lib/php.ini session.save_path = "/tmp"改爲 memcached 服務器地址 tcp ://10.10.10.1:11211 session.save_handler = files(改爲 memcached) 將全部的 WEB 服務器(WEB 服務器須要安裝客戶端)裏的 PHP 配置文件改爲上述配置,便可完成會話共享存儲
[root@LB01 vhost]# cd /web/www/ [root@LB01 www]# wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz [root@LB01 www]# tar zxf memadmin-1.0.12.tar.gz 無需安裝,解壓便可