企業級memcached緩存數據庫結合php使用與web管理memcached

環境php

[root@cache01 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@cache01 ~]# uname -a Linux cache01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

前言:轉載請註明出處。。。

memcached介紹

   官方:http://memcached.org/html

   Memcached是一款開源的、高性能的純內存緩存服務軟件。Mem是內存的意思,cache是緩存的意思,d是daemon的意思。前端

   memcached屬於非關係型數據庫。mysql

memcached原理及優勢

  在啓動Memcached時,根據指定的內存大小參數,會被分配一個內存空間。當咱們讀取數據庫的各種業務數據後,數據會同時放入Memcached緩存中,當下一次用戶請求一樣的數據,程序直接去Memcached 取數據返回給用戶。linux

  優勢:nginx

      ①對於用戶來說,用戶訪問網站更快了,體驗更好了。web

      ②對網站來講,數據庫壓力下降了。只有當內存沒有數據時纔會去請求數據庫。第一次寫入的數據也會請求數據庫。通常公司沒有預熱,只有當用戶讀取過數據庫纔會放到Memcached中。算法

      ③提高了網站的併發訪問,減小服務器數量。sql

Memcached在企業中使用場景

做爲數據庫的前端緩存應用

做爲數據庫的前端緩存最大目的:減小數據庫被大量訪問的壓力數據庫

一、完整緩存(簡單)

  例如京東的商品分類,就能夠實現放到memcached內存裏,而後再對外提供數據訪問。這個叫作預熱。此時能夠只讀取緩存就能讀到商品分類數據,無需讀取數據庫,因此數據庫的壓力就下降了。

二、熱點緩存(困難,難在數據一致性)

  熱點緩存通常是指由用戶更新的商品,例如淘寶的賣家,當賣家新增商品後,淘寶網的程序就會把商品寫入數據庫,而後讀取寫入的數據,把這部分數據放入到memcached內存中(無論有沒有用戶讀取數據),當下一次訪問這個商品的請求就直接從memcached內存中取數據。這種方法用來緩存網站熱點數據,即memcached中緩存常常被訪問的數據。

  提示:這個過程能夠經過程序實現,也能夠在數據庫上安裝memcache插件,直接由數據庫觸發更新內容到memcached中。

  做爲數據庫的前端緩存最大目的:減小數據庫被大量訪問的壓力

  爲了緩解數據庫的高併發訪問壓力,能夠在數據庫層配置數據庫讀寫分離,並對數據庫作負載均衡,但更簡單高效的方法是部署緩存數據庫,把部分數據保存在內存

做爲集羣后端的session會話保持

  • session: 存儲在服務端的特定用戶會話所需的屬性及配置信息,這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去
  • cookies:網站爲了辨別用戶身份,進行session跟蹤而存儲在用戶本地終端上的數據

  網站開發,判斷用戶信息,最開始的技術方法:服務器在你的瀏覽器中寫一個cookies,這個cookies就包含了你的用戶名及登陸信息。由於cookies是存儲在本地瀏覽器中,因此第三方工具很容易盜取cookies信息。

因此演變:

最開始: cookies cookies名字:內容(用戶名,登陸信息)
改進: 本地瀏覽器: cookies cookies名字:內容(session id 編號) 服務器: session session id:內容(用戶名,登陸信息) 主流使用場景:cookies + session

memcached分佈式緩存集羣特色

 memcached天生不支持分佈式集羣,經過程序支持分佈式存儲

 Memcached分佈式緩存集羣的特色:

1.   全部MC服務器內存的內容都是不同的。這些服務器內容加起來接近數據庫的容量。好比1T的數據庫,一臺緩存數據庫的內存沒有那麼大,所以分紅10臺緩存服務器。

2.   經過在客戶端(Web)程序或者MC的負載均衡器上用HASH算法,讓同一內容都分配到一個MC服務器。

3.   普通的HASH算法對於節點宕機會帶來大量的數據流動(失效),可能會引發雪崩效應。

4.   一致性HASH可讓節點宕機對節點的數據流動(失效)降到最低。

session和cookie區別(簡單理解)

一、cookie數據存放在用戶的瀏覽器上,session數據存儲在服務器上

二、cookie在本地的瀏覽器中,能夠被提取分析,安全性差。爲了安全,登陸帳戶等信息能夠緩存在session中。

三、session會在必定時間內保存在服務器上,訪問量增大會給服務器帶來壓力,可使用緩存工具,如memcache等

memcached部署

記得關閉防火牆及selinux

安裝

yum install memcached -y

查看默認配置

[root@cache01 ~]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""

啓動

systemctl start memcached.service

memcached的使用

注:使用這中方法的不多,這裏就簡要一說。

memcached存儲方式:一個key值對應一個value

set              key   0        0           10
<command name>  <key> <flags> <exptime> <bytes>\r\n - <flags> 是在取回內容時,與數據和發送塊一同保存服務器上的任意16位無符號整形(用十進制來書寫)。客戶端能夠用它做爲「位域」來存儲一些特定的信息;它對服務器是不透明的。 - <exptime> 是終止時間。若是爲0,該項永不過時(雖然它可能被刪除,以便爲其餘緩存項目騰出位置)。若是非0(Unix時間戳或當前時刻的秒偏移),到達終止時間後,客戶端沒法再得到這項內容。 - <bytes> 是隨後的數據區塊的字節長度,不包括用於分頁的「\r\n」。它能夠是0(這時後面跟隨一個空的數據區塊)。 <data block>\r\n - <data block> 是大段的8位數據,其長度由前面的命令行中的<bytes>指定。 \n 換行且光標移至行首 \r 光標移至行首,但不換行
參數詳解

使用實例

存數據

[root@cache01 ~]# printf "set key01 0 0 2\r\naa\r\n"|nc 10.0.0.21 11211 STORED

查看數據

[root@cache01 ~]# printf "get key01\r\n"|nc 10.0.0.21 11211 VALUE key01 0 2 aa END

刪除數據

[root@cache01 ~]# printf "delete key01\r\n"|nc 10.0.0.21 11211 DELETED [root@cache01 ~]# printf "get key01\r\n"|nc 10.0.0.21 11211 END

memcache php版本客戶端安裝使用

客戶端安裝

一、首先在web客戶端查詢php模塊中有沒有memcache模塊

[root@web01 ~]# /application/php/bin/php -m [PHP Modules] bcmath Core ctype curl date dom ereg fileinfo filter ftp gd hash iconv json libxml mbstring mcrypt mhash mysql mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix Reflection session shmop SimpleXML soap sockets SPL sqlite3 standard sysvsem tokenizer xml xmlreader xmlrpc xmlwriter xsl zlib [Zend Modules]
查詢實例

二、沒有memcache模塊,向php中補充memcache模塊

[root@web01 tools]# tar xf memcache-2.2.5.tgz ---- 解壓memcache的tar包 [root@web01 tools]# cd memcache-2.2.5/         [root@web01 memcache-2.2.5]# /application/php/bin/phpize --- 使用php程序的phpize命令進行擴展模塊 Configuring for: PHP Api Version: 20121113 Zend Module Api No: 20121212 Zend Extension Api No: 220121212 [root@web01 memcache-2.2.5]# ./configure --enable-memcache --with-php-cop/bin/php-config --with-zlib-dir 初始化memcache  [root@web01 memcache-2.2.5]# make && make install 編譯安裝

  檢查編譯結果:

[root@web01 memcache-2.2.5]# ls /application/php/lib/php/extensions/no-d2/ mcache.so

三、激活memcache並檢查有沒有memcache模塊

  激活memcache:

[root@web01 memcache-2.2.5]# sed -i '$a extension=memcache.so' /application/php/lib/php.ini [root@web01 memcache-2.2.5]# pkill php [root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm -t [17-Nov-2017 11:39:18] NOTICE: configuration file /application/php-5.5.3est is successful

  檢查有沒有memcache模塊:

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

php代碼測試

  在web服務器操做:

[root@web01 memcache-2.2.5]# vim /application/nginx/html/blog/wordpress/mc.php <?php $memcache = new Memcache; $memcache->connect('10.0.0.21', 11211) or die ("Could not connect") ; $memcache->set('key20171117', 'hello,world'); $get_value = $memcache->get('key20171117'); echo $get_value; ?>
測試的php代碼

  測試結果(在memcache服務器操做):

[root@cache01 ~]# printf "get key20171117\r\n"|nc 10.0.0.21 11211 VALUE key20171117 0 11 hello,world END

web管理memcached

http://www.junopen.com/memadmin/    memadmin下載地址

[root@web01 tools]# tar xf memadmin-1.0.12.tar.gz -C /application/nginx/html/blog/wordpress/

  瀏覽器登錄

  這樣就能夠從網頁中進行管理memcached了

memcached數據緩存

我使用的是wordpress站點,須要利用wordpress的一個配置文件object-cache.php,官網上有,將object-cache.php放入站點目錄下的wp-content目錄下並根據環境改ip信息就可使用了。

object-cache.php具體做用就是讓wordpress站點能夠鏈接memcached緩存數據庫

[root@web01 wp-content]# sed -i 's#127.0.0.1#10.0.0.21#' object-cache.php

  登錄瀏覽器檢查

 

memcached session共享

 使用方式1

  經過程序實現,web01只須要往memcahce寫session,web02從memcahce讀session(更具備通用性)

 使用方式2

   經過php的配置文件,讓php默認將session存儲在文件中,修改成存儲在memcached中

sed -i 's#session.save_handler = files#session.save_handler = memcache#;$a session.save_path = "tcp://10.0.0.21:11211"' /application/php/lib/php.ini

  使用這個功能,須要使用php的session函數

   手改方法:

 

相關文章
相關標籤/搜索