1.緩存數據庫
緩存:將數據存儲在內存中,只有當磁盤勝任不了的時候,纔會啓用緩存。
缺點:斷電數據丟失(雙電),用緩存存儲數據的目的只是爲了應付大併發的業務,至於數據存儲及可靠性不要找他了。
數據庫:mysql(關係型數據庫,可以保證數據一致性,保證數據不丟失,可是由於功能太多,致使性能不高)====》數據倉庫
緩存數據庫: memcache、redis(非關係型數據庫,性能極高,可是不保證數據完整)===》業務的數據提供者
2. 緩存數據庫使用場景
2.1 做爲數據庫的緩存
當數據庫(mysql)承受不了大併發的請求時,能夠將數據緩存到內存中(緩存數據庫),而後就能夠解決。
2.2 會話共享
場景:只要登陸了網站,之後訪問這個網站任何頁面都不要登陸了。
爲何服務器知道你是誰?
3. 安裝使用memcache
3.1 Memcached簡介
Memcached是一款開源的、高性能的純內存緩存服務軟件。Mem是內存的意思,cache是緩存的意思,d是daemon的意思。
Memcache是項目的名字,誕生於2003年。Memcache服務分爲客戶端和服務端兩部分,C/S架構。
-客戶端軟件memcache-2.25.tar.gz
-服務端軟件memcached-1.4.13.tar.gz
http://www.cnblogs.com/Csir/p/6711305.html
3.2 Memcached原理及優勢
在啓動Memcached時,根據指定的內存大小參數,會被分配一個內存空間。當咱們讀取數據庫的各種業務數據後,數據會同時放入Memcached緩存中,當下一次用戶請求一樣的數據,程序直接去Memcached取數據返回給用戶。
優勢:
①對於用戶來說,用戶訪問網站更快了,體驗更好了。
②對網站來講,數據庫壓力下降了。只有當內存沒有數據時纔會去請求數據庫。第一次寫入的數據也會請求數據庫。通常公司沒有預熱,只有當用戶讀取過數據庫纔會放到Memcached中。
③提高了網站的併發訪問,減小服務器數量。
企業案例:當機房斷電,如何開啓web服務器、memcached緩存服務器、數據庫服務器的?
開機順序:先開啓數據庫,再開啓緩存,而後預熱緩存數據庫,最後開啓web服務器。若是不預熱緩存數據庫,當開啓web後大量的訪問流入MySQL,形成的結果是MySQL啓動不了,一開就掛。
如何正確關閉網站集羣服務器?從前端日後端依次關閉。
如何正確開啓網站集羣服務器?從後端依次往前端開啓,緩存服務器要預熱。
3.4 安裝memcached
yum -y install memcached
3.5 啓動memcached
[root@Memcached ~]# memcached -h
-p <num> 指定監聽端口 TCP port number to listen on (default: 11211)
-l <addr> 綁定監聽的網卡 interface to listen on (default: INADDR_ANY, all addresses)
-d run as a daemon # 後臺運行
-u <username> assume identity of <username> (only when run as root) #指定用戶
-m <num> 分配內存大小 max memory to use for items in megabytes (default: 64 MB)
-c <num> max simultaneous connections (default: 1024) #併發訪問鏈接數
-P <file> 指定pid文件存放路徑save PID in <file>, only used with -d option
/etc/init.d/memcached start
3.6 使用
向Memcached添加數據:鍵值對
key1-->values1
key2-->values2
# 寫入數據
[root@web01 ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 127.0.0.1 11211
STORED
# 查詢數據
[root@web01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211
VALUE key008 0 10
oldboy0987
END
# 刪除數據
[root@web01 ~]# printf "delete key008\r\n"|nc 127.0.0.1 11211
DELETED
[root@web01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211
END
3.7 服務端memcached監控
printf "stats\r\n"|nc 127.0.0.1 11211
①監聽port或進程
②能夠模擬用戶先set後get,比對get內容是否是set的。crond nagios zabbix
③監控命中百分比
④監控響應時間及須要的狀態
4. PHP的memcache客戶端
4.1 安裝
tar xf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir
make
make install
sed -i.ori '$a extension=memcache.so' /application/php/lib/php.ini
pkill php
/application/php/sbin/php-fpm -t
/application/php/sbin/php-fpm
/application/php/bin/php -m|grep memcache
4.2 生成測試頁面
cat >>/application/nginx/html/blog/mc.php<<'EOF'
<?php
$memcache = new Memcache;
$memcache->connect('172.16.1.41', 11211) or die ("Could not connect");
$memcache->set('key20171017', 'oldboy0326');
$get_value = $memcache->get('key20171017');
echo $get_value;
?>
EOF
[root@web01 ~]# curl -H Host:blog.lewen.com 10.0.0.8/mc.php
oldboy0326
[root@web01 conf]# curl 10.0.0.8/mc.php
oldboy0326
應用 :session共享
須要運維+開發協同
運維:準備環境
開發:用環境
sed -i 's#session.save_handler = files#session.save_handler = memcache#;$a session.save_path = "tcp://172.16.1.41:11211"' /application/php/lib/php.ini
pkill php
/application/php/sbin/php-fpm -t
/application/php/sbin/php-fpm
總結:
1.服務端、客戶端安裝,管理工具的使用
2.session共享配置
3.memcached 做爲緩存工做過程