可以類比為 java中的 ThreadLocal 線程本地變量 就是為每個線程維護(hù)一個buffer pool實(shí)例,這樣就不用去爭用同一個實(shí)例了。相當(dāng)于減少高并發(fā)下mysql對INNODB_BUFFER緩沖池的爭用。
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的赫山網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
innodb_buffer_pool_instances 參數(shù),將 buffer pool 分成幾個區(qū),每個區(qū)用獨(dú)立的鎖保護(hù),這樣就減少了訪問 buffer pool 時需要上鎖的粒度,以提高性能。
緩沖池用于從磁盤讀取表和索引數(shù)據(jù)時,數(shù)據(jù)庫管理器分配的用于高速緩存這些表或索引數(shù)據(jù)的內(nèi)存區(qū)域。每個數(shù)據(jù)庫至少有一個緩沖池。
mysql是通過線程緩存來完成線程重用的??蛻舳税l(fā)起連接時,首先會去線程緩沖池里找是不是有空閑的線程。如果沒有才會去新建線程。當(dāng)一個連接斷開的時候,并不會馬上銷毀線程釋放資源。而是暫時把線程放在緩沖池中掛起。
1、先讀取nosql緩存層,沒有數(shù)據(jù)再讀取mysql層,并寫入數(shù)據(jù)到nosql。nosql層做好多節(jié)點(diǎn)分布式(一致性hash),以及節(jié)點(diǎn)失效后替代方案(多層hash尋找相鄰替代節(jié)點(diǎn)),和數(shù)據(jù)震蕩恢復(fù)了。
2、,redis是一種內(nèi)存性的數(shù)據(jù)存儲服務(wù),所以它的速度要比mysql快。2,redis只支持String,hashmap,set,sortedset等基本數(shù)據(jù)類型,但是不支持聯(lián)合查詢,所以它適合做緩存。
3、將MySQL數(shù)據(jù)首先放入Gearman中,然后通過一個自己編寫的PHP Gearman Worker,將數(shù)據(jù)同步到Redis。比分析binlog的方式增加了不少流程,但是實(shí)現(xiàn)成本更低,更容易操作。
4、先調(diào)優(yōu),確認(rèn)你的MySQL性能足夠好,重新調(diào)整架構(gòu)的代價比較大; 并不是所有數(shù)據(jù)都需要緩存,訪問頻率高,生成代價比較高的才考慮是否緩存,也就是說影響你性能瓶頸的考慮去緩存。
使用redis做緩存必須解決兩個問題,首先就是確定用何種數(shù)據(jù)結(jié)構(gòu)存儲來自mysql的數(shù)據(jù);確定數(shù)據(jù)結(jié)構(gòu)之后就是需要確定用什么標(biāo)識來作為數(shù)據(jù)的key。 mysql是按照表存儲數(shù)據(jù)的,這些表是由若干行組成。
,做為mysql等數(shù)據(jù)庫的緩存,是把部分熱點(diǎn)數(shù)據(jù)先存儲到redis中,或第一次用的時候加載到redis中,下次再用的時候,直接從redis中取。
使用mysql的udf,詳情請看MySQL : MySQL 1 Reference Manual : 23 Adding New Functions to MySQL 然后通過trigger在表update和insert之后進(jìn)行函數(shù)的調(diào)用,寫入到redis中去。大致是這個樣子。
應(yīng)用Redis實(shí)現(xiàn)數(shù)據(jù)的讀寫,同時利用隊(duì)列處理器定時將數(shù)據(jù)寫入mysql。
首先使用redis需要在服務(wù)器上提前安裝,安裝的命令是yum install redis(使用的是Centos系統(tǒng)),正常使用這命令后會彈出y/n選項(xiàng),選擇Y就可以了。我這里因?yàn)槭且呀?jīng)安裝過的就不再多說。
redis緩存其實(shí)就是把經(jīng)常訪問的數(shù)據(jù)放到redis里面,用戶查詢的時候先去redis查詢,沒有查到就執(zhí)行sql語句查詢,同時把數(shù)據(jù)同步到redis里面。redis只做讀操作,在內(nèi)存中查詢速度快。
首先明確是不是一定要上緩存,當(dāng)前架構(gòu)的瓶頸在哪里,若瓶頸真是數(shù)據(jù)庫操作上,再繼續(xù)往下看。明確memcached和redis的區(qū)別,到底要使用哪個。