1、Memcache簡介
Memcache是danga.com的一個項目,最先是爲 LiveJournal 服務的,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力。它能夠應對任意多個鏈接,使用非阻塞的網絡IO。因爲它的工做機制是在內存中開闢一塊空間,而後創建一個HashTable,Memcached管理這些HashTable,因此速度很是快。php
2、Memcache和memcached的區別前端
爲何會有Memcache和memcached兩種名稱?其實Memcache是這個項目的名稱,而memcached是它服務器端的主程序文件名。linux
3、何時使用Memcache和Memcache的使用環境算法
使用Memcache的網站通常流量都是比較大的,爲了緩解數據庫的壓力,讓Memcache做爲一個緩存區域,把部分信息保存在內存中,在前端可以迅速的進行存取。那麼通常的焦點就是集中在如何分擔數據庫壓力和進行分佈式,畢竟單臺Memcache的內存容量的有限的。數據庫
分佈式應用:後端
Memcache原本支持分佈式,咱們客戶端稍加改造,更好的支持。咱們的key能夠適當進行有規律的封裝,好比以user爲主的網站來講,每一個用戶都有User ID,那麼能夠按照固定的ID來進行提取和存取,好比1開頭的用戶保存在第一臺Memcache服務器上,以2開頭的用戶的數據保存在第二胎Mecache服務器上,存取數據都先按照User ID來進行相應的轉換和存取。
可是這個有缺點,就是須要對User ID進行判斷,若是業務不一致,或者其餘類型的應用,可能不是那麼合適,那麼能夠根據本身的實際業務來進行考慮,或者去想更合適的方法。api
減小數據庫壓力:數組
全部的數據基本上都是保存在數據庫當中的,每次頻繁的存取數據庫,致使數據庫性能極具降低,沒法同時服務更多的用戶,好比MySQL,特別頻繁的鎖表,那麼讓Memcache來分擔數據庫的壓力吧。咱們須要一種改動比較小,而且可以不會大規模改變前端的方式來進行改變目前的架構。緩存
我考慮的一種簡單方法:
後端的數據庫操做模塊,把全部的Select操做提取出來(update/delete/insert無論),而後把對應的SQL進行相應的hash算法計算得出一個hash數據key(好比MD5或者SHA),而後把這個key去Memcache中查找數據,若是這個數據不存在,說明還沒寫入到緩存中,那麼從數據庫把數據提取出來,一個是數組類格式,而後把數據在set到Memcache中,key就是這個SQL的hash值,而後相應的設置一個失效時間,好比一個小時,那麼一個小時中的數據都是從緩存中提取的,有效減小數據庫的壓力。缺點是數據不實時,當數據作了修改之後,沒法實時到前端顯示,而且還有可能對內存佔用比較大,畢竟每次select出來的數據數量可能比較巨大,這個是須要考慮的因素。服務器
4、Memcache的服務器端和客戶端安裝(安裝包見附件)
分爲兩個過程:memcache服務器端的安裝和memcached客戶端的安裝。
所謂服務器端的安裝就是在服務器(通常都是linux系統)上安裝Memcache實現數據的存儲。
所謂客戶端的安裝就是指php(或者其餘程序,Memcache還有其餘不錯的api接口提供)去使用服務器端的Memcache提供的函數,須要php添加擴展。這裏只提供客戶端的安裝:
[root@showip opt]# tar zxf memcache-2.2.7.tgz
[root@showip opt]# cd memcache-2.2.7
[root@showip memcache-2.2.7]# /usr/local/php/bin/phpize
[root@showip memcache-2.2.7]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@showip memcache-2.2.7]# make && make install
[root@showip memcache-2.2.7]# echo "extension = memcache.so" > /usr/local/php/etc/php.ini
5、重啓php測試