1. 程式人生 > >memcached緩存數據庫

memcached緩存數據庫

緩存數據庫

memcached緩存數據庫

第1章 什麽是memcache?

開源軟件,用於動態web應用以減輕數據庫的負載,通過在內存中緩存數據和對象來減少服務數據庫的次數,從而提高網站訪問的速度,工作機制是在內存中開辟一塊空間,建立一個hash table memcached自管理這些hash table

第2章 為什麽用緩存數據庫?

1. mysql ---數據存放在磁盤中,io較慢----數據倉庫存儲選擇mysql這種磁盤數據庫

2. memcached ---數據在內存中,io速度快---高並發,業務量大應選擇memcache這種內存數據

第3章 緩存數據庫使用場景:

1. 作為數據庫的緩存---mysql承受不了大並發的請求時,可以將數據緩存到內存中

2. session會話共享---只要登錄了一次網站,以後都不需要再次登錄了

第4章 cookiessession

網站程序判斷用戶登錄信息,最開始的奇數方法:服務器在你的瀏覽器中寫一個cookies,這個cookies中包含了你的用戶名和登錄信息,因為cookies是存儲在本地瀏覽器中,所以第三方工具很容易盜取cookies中的隱私信息,這時,session應運而生

4.1 最開始:

cookies=內容(用戶名,登錄信息)

4.2 改進後:

cookies=session id

session=用戶名

,登錄信息

一般企業應用是cookies+session

第5章 memcached分部署緩存集群

memcached天生不支持分布式集群,只能通過程序支持分部署存儲

5.1 memcached分布式緩存集群的特點:

所有mc服務器內存內容都是不一樣的,這些服務器內容加起來接近數據庫的容量,比如1t的數據庫,一臺緩存數據庫內存沒有那麽大,因此分成10臺服務器

5.2 普通hash算法:

動過客戶端程序或者mc的負載均衡器上ongoinghash算法,讓同一內容都分配到一個mc服務器上,這樣的算法對於節點宕機會帶來大量的數據流動,容易引起雪崩效應

5.3 一致性hash算法:

通過生成hash,數據都按照順時針距離最近的服務器進行匹配

,可以讓節點宕機對節點數據的流動失效降到最低

技術分享圖片

第6章 部署memcached服務:

1.1 安裝服務端軟件:

[root@nfs01 ~]# yum -y install memcached

1.1.1 查看memcached配置文件

[root@nfs01 ~]# cat /etc/sysconfig/memcached

PORT="11211" 監聽端口

USER="memcached" 指定用戶

MAXCONN="1024" 並發訪問數量

CACHESIZE="64" 劃分內存的大小

OPTIONS=""

1.2 啟動memcache服務

[root@nfs01 ~]# /etc/init.d/memcached start

Starting memcached: [ OK ]

1.3 向緩存數據庫寫入數據

[root@nfs01 ~]# printf "set key008 0 0 10\r\noldboy1234\r\n"|nc 127.0.0.1 11211

STORED 寫入數據成功

key008---數據的name

0 ---

0 ---超時時間,超過這個時間將不能訪問數據

10 ---表示寫入數據的字符數,這裏oldboy123410個字符數所以為10

1.4 查看數據庫中的數據

[root@nfs01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211

VALUE key008 0 10

oldboy1234

END

1.5 刪除數據

[root@nfs01 ~]# printf "delete key008\r\n"|nc 127.0.0.1 11211

DELETED

[root@nfs01 ~]# printf "get key008\r\n"|nc 127.0.0.1 11211

END

第7章 客戶端部署memcache:

2.1 安裝memcache

1089 cd memcache-2.2.5

1090 /application/php/bin/phpize

1091 ./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir

1092 make && make install

1093 echo $?

2.1.1 執行完命令後檢查目錄下存在memcache.so即可

[root@web01 memcache-2.2.5]# ll /application/php-5.6.32/lib/php/extensions/no-debug-non-zts-20131226/

total 256

-rwxr-xr-x 1 root root 260643 Feb 19 21:21 memcache.so

2.1.2 增加phpmemcache模塊

[root@web01 memcache-2.2.5]# sed '$a extension=memcache.so'/application/php/lib/php.ini -i.ori

[root@web01 memcache-2.2.5]# pkill php

[root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm -t

[19-Feb-2018 21:30:59] NOTICE: configuration file /application/php-5.5.32/etc/php-fpm.conf test is successful

[root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm

[root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm -m |grep memcache

memcache 檢查php是否增加了memcache模塊功能

2.2 php代碼測試:

2.2.1 在站點目錄blog中編寫測試文件:

cat >>/application/nginx/html/blog/mc.php<<'EOF'
<?php
$memcache = new Memcache;
$memcache->connect('10.0.0.21', 11211) or die ("Could not connect");
$memcache->set('key20180314', 'hello,world');
$get_value = $memcache->get('key20180314');
echo $get_value;
?>
EOF

2.2.2 測試web頁面訪問是否正常

技術分享圖片

1.1.1 在緩存服務器上檢查數據是否存在:

[root@cache01 ~]# printf "get key20180314\r\n"|nc 10.0.0.21 11211

VALUE key20180314 0 11

hello,world

END

第8章 web管理memcached:

tar xf memadmin-1.0.12.tar.gz -C /application/nginx/html/blog/

瀏覽器訪問http://blog.etiantian.org/memadmin

host:選項上填寫緩存服務器的ip地址即可

技術分享圖片

第9章 使memcached緩存 wordpress博文數據:

1.1 object-cache.php程序文件上傳到站點目錄中

cd /application/nginx/html/blog/wp-content/

rz

[root@web01 wp-content]# ll

total 28

-rw-r--r-- 1 nobody 65534 28 Jan 9 2012 index.php

-rw-r--r-- 1 root root 10112 Mar 14 12:05 object-cache.php

1.2 修改文件中的IP地址

grep 127.0.0.1 object-cache.php

sed -i 's#127.0.0.1#10.0.0.21#' object-cache.php

1.2.1 登錄網站發送一片博文:

技術分享圖片

1.1.1 登錄memcache web界面進行檢查: 緩存博文成功

技術分享圖片

第10章 memcached session會話共享:

方法一:通過程序實現,web01只需要往memcachesession,web02memcache讀取session,當作普通數據讀寫,更具有通用性

方法二:通過php的配置文件,php默認將session存儲在文件中,修改為存儲在memcached

sed 's#session.save_handler = files#session.save_handler = memcache#' /application/php/lib/php.ini -i

sed '$a session.save_path = "tcp://127.0.0.1:11211"' /application/php/lib/php.ini -i

/application/php/sbin/php-fpm -t

pkill php

/application/php/sbin/php-fpm

使用這個功能,需要使用phpsession函數


memcached緩存數據庫