我們知道,mysql是持久化存儲(chǔ),存放在磁盤(pán)里面,檢索的話,會(huì)涉及到一定的IO,為了解決這個(gè)瓶頸,于是出現(xiàn)了緩存,比如現(xiàn)在用的最多的 memcached(簡(jiǎn)稱(chēng)mc)。首先,用戶訪問(wèn)mc,如果未命中,就去訪問(wèn)mysql,之后像內(nèi)存和硬盤(pán)一樣,把數(shù)據(jù)復(fù)制到mc一部分。
redis和mc都是緩存,并且都是駐留在內(nèi)存中運(yùn)行的,這大大提升了高數(shù)據(jù)量web訪問(wèn)的訪問(wèn)速度。然而mc只是提供了簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),比如 string存儲(chǔ);redis卻提供了大量的數(shù)據(jù)結(jié)構(gòu),比如string、list、set、hashset、sorted set這些,這使得用戶方便了好多,畢竟封裝了一層實(shí)用的功能,同時(shí)實(shí)現(xiàn)了同樣的效果,當(dāng)然用redis而慢慢舍棄mc。
內(nèi)存和硬盤(pán)的關(guān)系,硬盤(pán)放置主體數(shù)據(jù)用于持久化存儲(chǔ),而內(nèi)存則是當(dāng)前運(yùn)行的那部分?jǐn)?shù)據(jù),CPU訪問(wèn)內(nèi)存而不是磁盤(pán),這大大提升了運(yùn)行的速度,當(dāng)然這是基于程序的局部化訪問(wèn)原理。
推理到redis+mysql,它是內(nèi)存+磁盤(pán)關(guān)系的一個(gè)映射,mysql放在磁盤(pán),redis放在內(nèi)存,這樣的話,web應(yīng)用每次只訪問(wèn)redis,如果沒(méi)有找到的數(shù)據(jù),才去訪問(wèn)Mysql。
然而redis+mysql和內(nèi)存+磁盤(pán)的用法最好是不同的。
前者是內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)保存在內(nèi)存中,當(dāng)然速度快。
后者是關(guān)系型數(shù)據(jù)庫(kù),功能強(qiáng)大,數(shù)據(jù)訪問(wèn)也就慢。
像memcache,mongoDB,Redis,都屬于No sql系列。
不是一個(gè)類(lèi)型的東西,應(yīng)用場(chǎng)景也不太一樣,還是要看你的需求來(lái)決定。